这是我第一次制作哈希表。我正在尝试将字符串(键)与指向Strain类的对象(数据)的指针相关联。

// Simulation.h
#include <ext/hash_map>
using namespace __gnu_cxx;

struct eqstr
{
 bool operator()(const char * s1, const char * s2) const
  {
   return strcmp(s1, s2) == 0;
  }
};

...
hash_map< const char *, Strain *, hash< const char * >, struct eqstr > liveStrainTable;

在Simulation.cpp文件中,我尝试初始化表:
string MRCA;
for ( int b = 0; b < SEQ_LENGTH; b++ ) {
  int randBase = rgen.uniform(0,NUM_BASES);
  MRCA.push_back( BASES[ randBase ] );
}
Strain * firstStrainPtr;
firstStrainPtr = new Strain( idCtr, MRCA, NUM_STEPS );
liveStrainTable[ MRCA ]= firstStrainPtr;

我收到一条错误消息,内容为“(((Simulation *)this))-> Simulation::liveStrainTable [MRCA]”中的“operator []”不匹配。我也尝试过以不同方式使用“liveStrainTable.insert(...)”,但无济于事。

真的很喜欢这方面的帮助。我很难理解适合SGI hash_map的语法,而SGI reference几乎无法为我澄清任何内容。谢谢。

最佳答案

尝试liveStrainTable[ MRCA.c_str() ]= firstStrainPtr;。它期望将const char *作为键值的类型,但是MRCA的类型为string

另一种方法是将liveStrainTable更改为:

hash_map< string, Strain *, hash<string>, eqstr > liveStrainTable;

09-26 22:42