最近在使用unordered_map的时候,遇到了一些问题,写这篇文章来记录一下。
首先,先简单介绍一下unordered_map:
template < class Key, //键值对中键的类型
class T, //键值对中值的类型
class Hash = hash<Key>, //容器内部存储键值对所用的哈希函数
class Pred = equal_to<Key>, //判断各个键值对键相同的规则
class Alloc = allocator< pair<const Key,T> > // 指定分配器对象的类型
> class unordered_map;
unordered_map是一种根据键值查找元素的无序容器,与其相类似的还有std::map,两者的区别是map的键值(key)是有序的,unordered_map是无序的。在需要使用map容器的时候,如果是需要有序排列键值的话,那毫无疑问是选用std::map,否则,建议使用unordered_map,因为unordered_map插入查找的效率会比map要高一些。
最近在项目中使用unordered_map的时候,由于键值Key使用了自定义类型,导致编译出现了问题,仔细查看了一下错误的原因,原来是使用自定义类型键值的时候,需要将该类型进行==运算符重载,否则unordered_map将无法判断两个键值是否相等,同理,对于std::map的话,使用自定义类型键值就需要重载<运算符。