我是 C++ 编程的新手,非常感谢那些不需要太多先验知识的回复。
感谢这里的建议,我创建了一个无序地图:
typedef std::tr1::unordered_map<std::string, Strain*> hmap;
此映射中的数据是指向 Strain 类实例的指针。一旦创建了这些实例,我就创建指向它们的指针,然后将这些指针添加到我的哈希表 (hmap strainTable) 和另一个向量 (vector< Strain *> liveStrains),例如,
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 );
liveStrains.push_back( firstStrainPtr );
strainTable[ MRCA ]= firstStrainPtr;
Strain 类的实例永远不会被删除,指向它们的指针也不会从 strainTable 中删除。指针偶尔会在 vector< Strain * > liveStrains 和 vector< Strain * > deadStrains 之间移动,但是一旦在 strainTable 上,它们就会停留在 strainTable 上。
这是犹太洁食吗?只要底层实例永远不会被破坏,添加到它们的指针会保持不变吗?
我应该总是能够通过使用例如第一个条目从 strainTable 中的指针获取成员属性是否也是正确的,
hmap::const_iterator itr1 = strainTable.begin();
int id = (itr1->second)->getStrainID();
我发现过了一会儿,我的 strainTable 中的指针指向垃圾。