C ++如何使用带有值的重复键区分Multimap,使用带有O(n)遍历的不同映射容器中值的唯一键

时间:2015-04-17 09:39:27

标签: c++ algorithm dictionary stl

您好我想用两个单独的Map容器​​分隔multimap

multimap<string,string> MulMap // Multimap Container
map <string,string> DuplicateKeyValueMap
map <string,string> UniqueKeyValueMap

根据MulMap迭代,我可以使用countequal_range分隔重复键和唯一键 我用谷歌搜索并获得了这种方法需要O(n log n)复杂度的信息。

有没有比这更好的方法来编码以实现O(n)复杂性?

1 个答案:

答案 0 :(得分:1)

如果您只是想知道两个地图是否包含相同的元素,那么直接算法(即O(n))可以工作:

return m1.size() == m2.size() &&
       std::equal(m1.begin(), m1.end(), m2.begin());

您必须至少查看一次每个唯一的地图元素,这样做也足够了。由于两张地图都是有序的,因此您可以在发现不匹配时立即停止。

在C ++ 14中,您可以使用更简单的四迭代器形式:

return std::equal(m1.begin(), m1.end(), m2.begin(), m2.end());