1:什么是关联式容器?
关联式容器依照特定的排序准则 自动为元素排序 元素可以是任何类型的value 也可以是
key/value pair key可以是任何类型 映射至一个相关value 而value也可以是任意类型
通常是所有容器默认以<进行比较 也可以通过自己的比较函数 定义出不同的排序准则
2:关联式容器的特点
其底层是由二叉树实现 每个节点都有一个父节点和两个子节点 左节点所有元素都比自己小,右节点的所有元素都比自己大。
注意:关联式容器的主要差别在于元素的种类以及处理重复元素的方法
寻找某一个特定的value的时间复杂度是对数 例如查找1000中的特定数字 你平均需要找10次 而不是 500次
缺点: 不能改动元素的value 会破坏元素的自动排序
Set | 元素根据其value进行排序 每个元素只能出现一次 不允许重复 |
---|---|
Multiset | 和Set的唯一区别是元素可以重复 可以包含多个value相同的元素 |
Map | 每个元素都是key/value pair 其中key是排序准则的基准 每个key只能出现一次 不许重复 可以视为索引为任意类型的数组 |
Multimap | 和Map的唯一区别是可以存在多个key值相同的元素 因此Multimap可以被当作字典使用 |
可以将set视为特殊的map 元素的value等同于key 这些容器都是由二叉树实现
set和multiset使用实例
#include<set>
#include<string>
#include<iostream>
using namespace std;
int main()
{
multiset<string> cities{
"shanghai","chongqi","dongbie","liaoning","chengdu","zhenzhou"
};
for (const auto& elem : cities)
{
cout << elem << " ";
}
cout << endl;
cities.insert({ "shanghai","chongqi","dongbie" });
for (const auto& elem : cities)
{
cout << elem << " ";
}
cout << endl;
return 0;
}
map和multimap使用实例
#include<map>
#include<string>
#include<iostream>
using namespace std;
int main()
{
multimap<int, string> coll;
coll = {
{1,"HELLO"},
{2,"WORLD"},
{3,"lucky"},
{4,"come"},
{5,"My"},
{6,"lover"}
};
//取出的elem是pair类型 取second
for (auto elem : coll)
{
cout << elem.second << " ";
}
cout << endl;
return 0;
}