Associative Containers
关联容器
- 关联容器类型
使用关联容器
使用关联数组的一个典型例子是单词数统计:
1
2
3
4
5
6
7
8
9// count the number of times each word occurs in the input
map<string, size_t> word_count; // empty map from string to size_t
string word;
while (cin >> word)
++word_count[word]; // fetch and increment the counter for word
for (const auto &w : word_count) // for each element in the map
// print the results
cout << w.first << " occurs " << w.second
<< ((w.second > 1) ? " times" : " time") << endl;若
word不存在于map中,下标操作会创建一个键为word值为0的元素。当我们从
map中获取一个元素时,得到的元素类型为pair。
关联容器概述
定义关联容器
- 在
C++ 11标准下,关联容器可以进行列表初始化:
1 | |
map或set中的键必须是唯一的,一个键只能对应容器中的一个元素;multimap和multiset没有这个限制,可以有多个元素具有相同的键。
键类型的要求
默认情况下,标准库使用键类型的
<运算符来比较两个键。对于没有
<运算符的类型,可以在模板参数中提供比较操作类型(函数指针):1
2
3
4
5bool compareIsbn(const Sales_data &lhs, const Sales_data &rhs)
{
return lhs.isbn() < rhs.isbn();
}
multiset<Sales_data, decltype(compareIsbn)*> bookstore(compareIsbn);对函数名使用
decltype时,必须添加*才能得到函数指针类型。
pair类型
pair的默认构造函数对数据成员进行值初始化。pair上的操作
关联容器操作
- 关联容器的额外类型别名
关联容器迭代器
set类型定义了iterator和const_iterator类型,但两种迭代器对set的元素都只能进行只读访问。
添加元素
- 关联容器
insert操作
删除元素
- 从关联容器中删除元素
map的下标操作
map和unordered_map的下标操作
访问元素
- 在一个关联容器中查找元素的操作
无序容器
- 无序容器管理操作
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!