我创建了一个vector
,其中包含多个map<>
。
vector<map<key,value>*> v;
v.push_back(&map1);
// ...
v.push_back(&map2);
// ...
v.push_back(&map3);
在任何时候,如果必须检索value
,我会遍历vector
并在每个key
元素中找到map
(即{{ 1}},v[0]
等)直到找到它为止。这是最好的方法吗?我愿意接受任何建议。这只是我给出的一个想法,我还没有这样实现(如果有任何错误,请显示)。
修改:找不到v[1]
元素并不重要。在多个模块中,准备了不同的map
。随着代码的进展,它们会逐一添加。每当搜索到map
时,都应在所有key
的中搜索结果,直到那时。
答案 0 :(得分:3)
如果没有关于目的和用途的更多信息,可能有点难以回答。例如,是否需要有多个地图对象?如果没有,那么您可以将所有项目存储在单个地图中并完全消除该向量。这样做查找会更有效。如果地图中有重复的条目,则每个值的关键字可以包括当前定义放置值的地图的区分信息。
答案 1 :(得分:1)
如果您需要知道找到密钥的子图,请尝试:
unordered_set<key, pair<mapid, value>>
搜索的复杂性要高得多。
答案 2 :(得分:1)
如果密钥不重叠,即通过所有地图都是唯一的,那么我建议set
或unordered_set
使用自定义比较仿函数,因为这将有助于查找。或者甚至使用新地图扩展第一张地图,如果分析显示足够快/更快。
如果密钥不是唯一的,请使用multiset
或unordered_multiset
再次使用自定义比较仿函数。
您也可以手动对vector
进行排序,然后使用binary_search
进行搜索。无论如何,我建议使用树来存储所有地图。
答案 3 :(得分:1)
这取决于您的地图是如何“独立创建”的,但如果它是一个选项,我只会制作一个全局地图(或多地图)对象并将其传递给您的所有创作者。如果您到处都有许多小地图,您只需在全局地图上调用insert
即可将地图合并到其中。
这样你只有一个对象可以在其中执行查找,效率相当高(多图的O(log n),unordered_multimap的预期O(1))。
这也使您不必将原始指针传递给周围的容器并且必须清理!