我有嵌套类型的地图:
std::map<int,std::map<pointer,pointer>>
我每次/每帧迭代地图并对其进行更新。基本上我有2个嵌套if循环。 我有一个数组,我需要用2个属性对数据进行排序。第一个属性是整数,它是第一个键,然后第二个属性是指针,它是主映射中嵌套映射的键。所以我的代码是这样的:
iterator = outermap.find();
if(iterator!=outermap.end()){
value = iterator->second;
it1 = value.find();
if(it1!=value.end(){
value1 = it1->second;
// do something
}
else{
// do something and add new value
}
}
else {
// do something and add the values
}
这非常慢,导致我的应用程序降低帧速率。有没有替代方案?我们可以使用哈希码和链表来实现相同的目标吗?
答案 0 :(得分:3)
你可以使用std :: unordered_map,它会对键进行散列,以便更快地找到完成。使用value = iterator->second
将您的整个地图复制到&#39;值&#39;变量。使用引用可以避免不必要的复制,并且性能更好,例如:auto & value = iterator->second
。
此外,std :: map保证为ordered。这可以用于您的优势,因为您的键是最外层地图的整数。
答案 1 :(得分:2)
首先,你的问题有点模糊,所以这可能适合你的问题,也可能不适合你。
现在,您有一个map<int, map<pointer, pointer>>
,但您从不在内部地图上操作。您所做的就是按int
和pointer
查找值。这也正是你应该做的事情,使用这两者的集合作为地图中的关键。其类型为pair<int, pointer>
,然后地图变为map<pair<int, pointer>, pointer>
。
还有一点需要注意:您似乎知道要提前在地图中搜索的键。如果检查元素是否存在不仅仅是为了安全,您还可以使用地图的重载operator[]
。然后查找变为outermap[ikey][pkey]
并返回默认初始化的pointer
(因此可能是空指针,它pointer
实际上是指针)。对于建议的组合地图,查找将为outermap[make_pair(ikey, pkey)]
。