地图插图返回错误答案

时间:2014-03-31 08:32:01

标签: c++ class map find

我在地图中使用地图来跟踪一些数据。

为了添加一些数据,我首先检查我是否基于全局键作为字符串进行跟踪。

如果我在地图中有那个键,那么我会检查第一个地图里面的地图,看看它是否有值,键是无符号短整数。这是结构。

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。

我是否需要在我的课程中定义任何操作符或任何内容才能使其工作?

1 个答案:

答案 0 :(得分:1)

而不是

fileInfo currFI = it->second;

fileInfo &currFI = it->second;

当else块结束时,currFI变量被丢弃。你应该把它reference作为fileMap项目,因此保存在那里。