码迷,mamicode.com
首页 > 其他好文 > 详细

unordered_map用法注意

时间:2018-07-17 10:41:58      阅读:125      评论:0      收藏:0      [点我收藏+]

标签:struct   cto   特化   定义   需要   hash   就会   改变   bsp   

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用法注意

标签:struct   cto   特化   定义   需要   hash   就会   改变   bsp   

原文地址:https://www.cnblogs.com/Zzz-y/p/9321689.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!