unordered_map用法注意

Posted zzz-y

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了unordered_map用法注意相关的知识,希望对你有一定的参考价值。

C++ STL提供了 unordered_map,底层是用哈希表实现的,可以根据 key 搜索 对应的 value。

资料:http://www.cplusplus.com/reference/unordered_map/unordered_map/

 

1 template < class Key,                                    // unordered_map::key_type
2            class T,                                      // unordered_map::mapped_type
3            class Hash = hash<Key>,                       // unordered_map::hasher
4            class Pred = equal_to<Key>,                   // unordered_map::key_equal
5            class Alloc = allocator< pair<const Key,T> >  // unordered_map::allocator_type
6            > class unordered_map

第一点,一般来说,特化一个unordered_map只需要给出key 和 T, 后面的Hash, Pred和Alloc都可以用默认参数。但是如果要用自定义的数据结构作为key,就要提供对应的hash函数和比较函数。

第二点,是关于  operator[]  ,unordered_map重载了[],可以使用下标搜索值。

在介绍中有这么一段话:

If k does not match the key of any element in the container, the function inserts a new element with that key and returns a reference to its mapped value. Notice that this always increases the container size by one, even if no mapped value is assigned to the element (the element is constructed using its default constructor).

也就是说,如果用 operator[] 去搜索值,如果对应的key不存在,就会自动插入一个,对应的value会调用其默认构造函数。

所以说如果不确定某个key是否存在,要先用 unordered_map::find 去找,找到了再搜索对应值。不然就会在不经意间改变整个unordered_map。

 

以上是关于unordered_map用法注意的主要内容,如果未能解决你的问题,请参考以下文章

CSP核心代码片段记录

c_cpp 加载源图像固定用法(代码片段,不全)

SQL Select 语句的用法

JavaSE 方法的使用

C++ unordered_map使用自定义类型作为键值

unordered map 和map的区别