由于本文涉及内容比较多,为了尽可能的讲详细些,会把各种例子附上,所以代码样例会比较多,也为了更好的布局,本系列将分开讲解,并且前期为了更加贴合实战需求,暂时只对一些常用的STL容器和基本功能进行讲解。
为了使每篇文章具有一定的独立性,后续的文章大多数会将之前文章涉及的知识点中提取,并且在后续会将相应的例子补上。
本文STL系列知识参考《C++语言程序涉及(第5版)》
关联容器的键之间必须能过够使用"<"进行比较,对于int,double这些类型,c++有内置的比较运算符,而对于类类型,需要重载“<”运算符
关联容器除了无序容器外都会自动对键进行排序
顺序容器最坏情况下需要进行n次比较后才可找到
而关联容器使用“平衡二叉树”结构,在最坏情况下查找元素大约需要lgn次比较即可查到
关联容器分为单重关联容器和多重关联容器
单重关联容器中的键值是唯一的,不允许重复,集合(set)
和映射(map)
就是单重关联容器
多重关联容器中,相同的键值允许重复出现,多重集合(multiset)
和多重映射(multimap)
就是这一类
以元素本身作为键,集合(set)
和多重集合(multiset)
属于这一类
元素由键和某种类型的附加数据共同构成,键只是元素的一部分
映射(map)
和多重映射(multimap)
属于这一类
简单关联容器 | 二元关联容器 | |
---|---|---|
单重关联容器 | 集合(set) | 映射(map) |
多重关联容器 | 多重集合(multiset) | 多重映射(multimap) |
二元关联容器的元素是由键类型和附加数据类型的组合,这种组合可以是用一个二元组(pair)来表示,pair是
template<class T1,class T2>
struct pair{
//成员均为public
T1 first;
T2 second;
pair();//默认构造函数
pair(const T1 &x,const T2 &y);//构造first=x,second=y的二元组
template<class U,class V>pair(const pair<U,V>&p);//复制构造函数
}
例如
map
multimap
pair类型对象构造支持列表初始化:
pair<string,int>str_int_pair={"first",2};