第11章 关联容器
与顺序容器不同的是,关联容器中的元素是按关键字来保存和访问的,而顺序容器中的元素是按它们在容器中的位置来顺序保存和访问的,那么典型的就是我们常见的map与set数据结构
关联容器类型
使用map
map类型通常被称为关联数组
using namespace std;
int main(int argc, char **argv)
{
map<string, size_t> m_map;
m_map["a"] = 4;
m_map["b"] = 5;
cout << m_map["a"] << endl;
cout << m_map["b"] << endl;
return 0;
}
使用set
map<string, size_t> m_map;
vector<string> vec = {"aaa", "bbb", "ccc", "aaa"};
set<string> m_set;
for (auto &item : vec)
{
m_set.insert(item);
cout << item << endl;
if (m_map.find(item) != m_map.end())
{
m_map[item]++;
}
else
{
m_map[item] = 1;
}
}
for (auto &item : m_map)
{
cout << item.first << " " << item.second << endl;
}
for (auto &item : m_set)
{
cout << item << endl;
}
定义关联容器
当定义一个map时,必须指明关键字类型与值类型,而定义set只需指明关键字类型
初始化map与set
空容器、列表初始化、映射键值对列表初始化
map<string, size_t> map_1;
set<string> set_1 = {"aaa", "bbb", "ccc", "aaa", "bbbb"};
map<string, string> map_2 = {
{"aaa", "vfvdf"},
{"bbb", "adfdsfs"},
{"ccc", "vfdvdf"}};
初始化multimap与multiset
multi的意义就是,map一个关键词可以存储多个值,set也可以存储多个相同的值
vector<string> vec = {"aaa", "aaa", "bbb", "bbb", "ccc"};
multiset<string> m_set(vec.begin(), vec.end());
for (auto &item : m_set)
{
cout << item << " ";
}
cout << endl;
cout << m_set.size() << endl;
multimap<string, string> m_map = {{"aaa", "ccc"}, {"aaa", "vvv"}};
for (auto &item : m_map)
{
cout << item.first << " " << item.second << endl;
}
关键字类型要求
对于有序容器,map、multimap、set、multiset,关键字类型要求必须定义元素比较方法,默认情况下,标准库使用关键字类型的
Original: https://blog.51cto.com/u_15302296/5397922
Author: 高万禄
Title: 第11章 关联容器【C++】
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/517202/
转载文章受原作者版权保护。转载请注明原作者出处!