从2011年开始,C++支持非排序的unordered_map和unordered_set(原先的map和set都是通过有序结构实现的)
下面是一些性能上的测试
#include#include #include
unordered_set:7417
set:1228unordered_set:511set:1050#include#include #include
unordered_map:7894
map:1722unordered_map:497map:959
对自定类型使用hash表
class Pair{ public: int a; int b; Pair(){} Pair(int a1,int b1){ a=a1; b=b1; } bool operator==(const Pair& p)const{ return a==p.a&&b==p.b; }};struct Hash_Pair{ size_t operator()(const Pair &p) const { double temp=p.a; temp+=p.b*2147483647.0; hashht;//直接用了已经提供的hah函数,没有自己编写hash return ht(temp); }};struct Equal_Pair{ bool operator()(const Pair &left, const Pair &right) const { return left.a==right.a&&left.b==right.b; }};unordered_set set;