第11章 关联容器【C++】

第11章 关联容器

与顺序容器不同的是,关联容器中的元素是按关键字来保存和访问的,而顺序容器中的元素是按它们在容器中的位置来顺序保存和访问的,那么典型的就是我们常见的map与set数据结构

关联容器类型

第11章 关联容器【C++】

使用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/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球