nametable.h

来自「Amis - A maximum entropy estimator 一个最大」· C头文件 代码 · 共 77 行

H
77
字号
#ifndef Amis_NameTable_h_#define Amis_NameTable_h_#include <amis/configure.h>#include <amis/StringStream.h>#include <amis/Feature.h>#include <map>#include <string>AMIS_NAMESPACE_BEGINclass NameTableBase {public:  NameTableBase() {}  virtual ~NameTableBase() {}  virtual std::string featureNameString( FeatureID id ) const = 0;};template < class Name = std::string >class NameTable : public NameTableBase {protected:  std::map< FeatureID, Name > feature_name;  std::map< Name, FeatureID > feature_id;public:  NameTable() {}  virtual ~NameTable() {}  int numFeatures() const { return feature_name.size(); }  std::string featureNameString( FeatureID id ) const {    OStringStream oss;    oss << featureName( id );    return oss.str();  }  const Name& featureName( FeatureID id ) const {    typename std::map< FeatureID, Name >::const_iterator it = feature_name.find( id );    if ( it == feature_name.end() ) {      OStringStream oss;      oss << "FeatureID " << id << " not found";      throw IllegalFeatureError( oss.str() );    }    return it->second;  }  FeatureID featureID( const Name& name ) const {    typename std::map< Name, FeatureID >::const_iterator it = feature_id.find( name );    if ( it == feature_id.end() ) {      OStringStream oss;      oss << "Feature " << name << " not found";      throw IllegalFeatureError( oss.str() );    }    return it->second;  }public:  void registerNewFeature( const Name& name, FeatureID id ) {    if ( feature_name.find( id ) != feature_name.end() ) {      OStringStream oss;      oss << "Feature ID " << id << " already exists";      throw IllegalFeatureError( oss.str() );    }    if ( feature_id.find( name ) != feature_id.end() ) {      OStringStream oss;      oss << "Feature " << name << " already exists";      throw IllegalFeatureError( oss.str() );    }    feature_name[ id ] = name;    feature_id[ name ] = id;  }};AMIS_NAMESPACE_END#endif // Amis_NameTable_h_// end of NameTable.h

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?