基本上我有一个类型为
的edgeCostMapmap<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;
}
};
答案 0 :(得分:0)
如果它们的浮点数相等,你的比较器会认为两个键相等(不小于另一个)。你不能在地图中放两个相等的键。您可能希望使用默认比较器,但将float
置于集合中。这将首先对float进行排序,然后对整数进行排序,确保如果它们的整数不同,则键不相等。