将值添加到地图后,地图大小与预期值不同

时间:2015-03-02 07:52:30

标签: c++ dictionary

基本上我有一个类型为

的edgeCostMap
map<pair<int, float>, int> 

和42个顶点的向量。我循环遍历顶点向量并将值添加到地图中,如下所示:

for(int vertexIndex = 0; vertexIndex < V.size(); vertexIndex++)
{
    pair<int, float> toAdd;
    toAdd.first = vertexIndex;
    toAdd.second = V[vertexIndex].edgeCollapseCost;
    edgeCostMap[toAdd] = vertexIndex;
}

然而,在循环完成后,我按如下方式打印出地图内容:

for(map<pair<int, float> ,int>::iterator it = edgeCostMap.begin(); it != edgeCostMap.end(); it++) 
{
    logFile<<"Vertex "<<it->second<<" has cost "<<it->first.second<<" has "<<mapVF[it->second].size()<<"neighbors"<<endl;
}

我只收到12条陈述。我的映射是否错误完成了?

比较功能:

class comparator {
public:
    bool operator()(const std::pair<int, float>& a, const std::pair<int, float>& b) const {
        return a.second < b.second;
    }
};

1 个答案:

答案 0 :(得分:0)

如果它们的浮点数相等,你的比较器会认为两个键相等(不小于另一个)。你不能在地图中放两个相等的键。您可能希望使用默认比较器,但将float置于集合中。这将首先对float进行排序,然后对整数进行排序,确保如果它们的整数不同,则键不相等。