这些容器都是用hash table,之所以叫unordered是因为这个名字已经被占了。
hash是把key映射到一个数组的下标,数组的每个元素是一个链表,链表里面存放value。每个数组元素是一个bucket。
数组中存放的value的个数除以数组的长度,就是load factor,表示哈希表已经加载满的程度。
load_factor(),返回当前的加载因子
max_load_factor(f),设置最大加载因子。如果加载因子超过了这个值,就会引起rehash,保证常数时间复杂度。
可以把unordered容器当做stl里面的容器用,接口基本上一样的。
一、 unordered_map
unordered_map<keyType, valueType> um;
1.插入
um.insert( um::value_type(k, v) );
um[k] = v;
2.查找
um::iterator iter = um.find(k);
3.删除
um.erase(iter);
4.查看
um.size() 总元素个数
um.count(k) key为k的元素个数(0或者1)
um.empty() 是否为空
5.特有成员函数
um::hasher hashfunc = um::hash_function;
um::key_equal equalfunc = um::key_eq;
二、 unordered_set
和上面的操作基本上一样的,除了没有[]操作符以外。
三、unordered_multiset和unordered_multimap
很少用到,可以存放同一个key值的多个kv pair。