关联容器概述
关键字类型的要求 关联容器操作
添加元素
向map添加元素 删除元素
下标操作访问元素 无序容器
使用无序容器管理桶
关联容器概述 关键字类型的要求自定义关键字类型的比较函数:必须满足严格弱序
bool compareIsbn(const Sales_data &lhs, const Sales_data &rhs)
{
return lhs.isbn() < rhs.isbn();
}
// decltype获取函数指针类型
multiset bookstore(compareIsbn);
关联容器操作
添加元素
向map添加元素
word_count.insert({word, 1});
word_count.insert(make_pair(word, 1));
word_count.insert(pair(word, 1));
word_count.insert(map::value_type(word,1));
insert操作返回一个pair,first成员是一个指向该元素的迭代器,second成员是一个bool值,表示是否插入成功,如果关键字已在容器中为false,否则为true。
multimap的insert操作只返回一个指向新元素的迭代器。
删除元素c.erase(k) // 从c中删除所有关键字为k的元素,返回删除元素的数量 c.erase(p) // 从c中删除迭代器p指向的元素,返回指向p之后的元素的迭代器 c.erase(b, e) // 删除迭代对b和e所表示的范围中的元素,返回e下标操作
c[k] // 返回关键字为k的元素,如不存在则添加一个关键字为k的元素,对其进行值初始化 c.at(k) // 访问关键字为k的元素,如不存在则返回out_of_range异常访问元素
c.find(k) // 返回一个迭代器,指向第一个关键字为k的元素 c.count(k) // 返回关键字等于k的元素数量 c.lower_bound(k) // 返回一个迭代器,指向第一个关键字不小于k的元素(无序容器不适用) c.upper_bound(k) // 大于k c.equal_range(k) // 返回一个迭代器pair,表示关键字等于k的元素的范围无序容器 使用无序容器
unordered_map、unordered_set、unordered_multi_map、unordered_multi_set
有序关联容器使用比较运算符组织元素,而无序关联容器使用哈希函数和关键字类型的==运算符
管理桶具有相同哈希值的所有元素保存在同一个桶中
c.bucket_count() // 正在使用的桶的数目 c.max_bucket_count() // 容器能容纳的最多的桶的数量 c.bucket_size(n) // 第n个桶中的元素数量 c.bucket(k) // 关键字为k的元素在哪个桶中 local_iterator // 可以用来访问桶中元素的迭代器类型 c.begin(n), c.end(n) // 桶n的首尾元素迭代器 c.load_factor() // 每个桶的平均元素数量,float值 c.max_load_factor() // c试图维护的平均桶大小 c.rehash(n) // 重组存储,使得bucket_count >= n 且 bucket_size > size/max_load_factor c.reserve(n) // 重组存储,使得c可以保存n个元素且不必rehash
定义关键字类型为自定义类类型的无序容器,需要重载hash函数和==运算符



