【发布时间】:2021-12-02 15:09:08
【问题描述】:
如何使用std::equal 检查两个std::unordered_map 是否相等,以检查两个容器是否具有相同的键及其对应的键值。在我的代码下方打印unequal,即使两个容器的大小相同,键集和对应的键值也相同。
#include <iostream>
#include <unordered_map>
int main() {
std::unordered_map<char, int> um1, um2;
um1['f'] = 1;
um1['o'] = 1;
um1['r'] = 1;
um2['o'] = 1;
um2['r'] = 1;
um2['f'] = 1;
if (um1.size() == um2.size() && std::equal(um1.begin(), um1.end(), um2.begin()))
std::cout << "equal" << std::endl;
else
std::cout << "unequal" << std::endl;
}
【问题讨论】:
-
If (um1 == um2)? -
请记住,这是一个 无序 映射,因此迭代器迭代键的顺序是未指定的,并且可能看起来是随机的。这适用于
std::map,因为它将以一致的方式对其元素进行排序。但是std::unordered_map是作为哈希图实现的,因此您获取元素的顺序取决于哈希函数、桶大小和插入顺序。 (如果发生重新散列,它也可能会改变) -
@NathanOliver 它给了我所需的输出。这适用于任何广告订单吗?
-
@Harry operator== 适用于任何广告订单。但是请记住,比较两个 unordered_map 可能比比较两个法线贴图要昂贵得多(由于它们的未排序性质) - 比较
std::maps 最多为O(n)而比较std::unsorted_maps 最多为 @ 987654333@。 (其中 n 是地图中元素的数量)
标签: c++