我在地图中使用地图来跟踪一些数据。
为了添加一些数据,我首先检查我是否基于全局键作为字符串进行跟踪。
如果我在地图中有那个键,那么我会检查第一个地图里面的地图,看看它是否有值,键是无符号短整数。这是结构。
map<string, fileInfo> fileMap;
class fileInfo {
public:
unsigned short int numNeighbors;
map<unsigned short int, neighborInfo> neighbors; //key is id
//... more
}
我能够检查我的主键是否在我的整个地图中,但是当我检查该键是否在那里时,我在插入时收到错误,表明该邻居已经存在,但它没有&# 39;吨。我检查了理智,并确保检查我的密钥是否匹配,但他们没有。
找到第一把钥匙it = fileMap.find(filename);
if (it == fileMap.end()) {
//add to fileMap
}else{
fileInfo currFI = it->second;
neighborInfo n = createNeighbor();
pair<it_Neighbor, bool> ret;
map<unsigned short int, neighborInfo> neighbors = currFI.neighbors;
ret = currFI.neighbors.insert(pair<unsigned short int, neighborInfo> (id, n));
if (ret.second == false) {
cout<< "Neighbor already exists for this file, ignoring duplicates."<< endl;
} else {
cout << "size" << currFI.neighbors.size() << endl;
}
我的大小输出总是2,应该是4。
我是否需要在我的课程中定义任何操作符或任何内容才能使其工作?
答案 0 :(得分:1)
而不是
fileInfo currFI = it->second;
试
fileInfo &currFI = it->second;
当else块结束时,currFI
变量被丢弃。你应该把它reference
作为fileMap
项目,因此保存在那里。