作者:烦恼的天伦之乐_456 | 来源:互联网 | 2022-12-18 15:52
在考虑重复之前,请理解我的问题的基础.
为什么C++ std::map
接受a std::pair
作为键类型,但是a std::unordered_map
不接受?
第一个案例完美编译:
#include
第二种情况给出了大量的编译错误.从这个SO问题和这个SO问题中可以清楚地看出,必须创建自定义散列函数和等价运算符.
#include
#include
using namespace std;
typedef pair int_pair;
int main()
{
unordered_map m;
return 0;
}
这里的问题不是如何编写哈希函数std::unordered_map
.问题是,为什么在不需要的时候std::map
需要一个人?
我知道std::map
是一个二进制搜索树(BST),但是在非基本类型(int_pair)的键之间进行比较的确切程度如何呢?
1> François And..:
std::map
不散列任何东西.它std::less
用作默认比较器.它适用于任何支持的类型operator<
.
std::unordered_map
使用提供的哈希对其元素进行排序std::hash
.
它恰好std::pair
提供了operator<
,但没有专门化std::hash
.