【STL】关联容器的分类

14天阅读挑战赛

前言

由于本文涉及内容比较多,为了尽可能的讲详细些,会把各种例子附上,所以代码样例会比较多,也为了更好的布局,本系列将分开讲解,并且前期为了更加贴合实战需求,暂时只对一些常用的STL容器和基本功能进行讲解。

为了使每篇文章具有一定的独立性,后续的文章大多数会将之前文章涉及的知识点中提取,并且在后续会将相应的例子补上。

本文STL系列知识参考《C++语言程序涉及(第5版)》

STL指南

关联容器的分类

关联容器的键之间必须能过够使用"<"进行比较,对于int,double这些类型,c++有内置的比较运算符,而对于类类型,需要重载“<”运算符

关联容器除了无序容器外都会自动对键进行排序

顺序容器最坏情况下需要进行n次比较后才可找到
而关联容器使用“平衡二叉树”结构,在最坏情况下查找元素大约需要lgn次比较即可查到

关联容器分为单重关联容器和多重关联容器

单重关联容器

单重关联容器中的键值是唯一的,不允许重复,集合(set)映射(map)就是单重关联容器

多重关联容器

多重关联容器中,相同的键值允许重复出现,多重集合(multiset)多重映射(multimap)就是这一类

简单关联容器

以元素本身作为键,集合(set)多重集合(multiset)属于这一类

二元关联容器

元素由键和某种类型的附加数据共同构成,键只是元素的一部分
映射(map)多重映射(multimap)属于这一类

关系表

简单关联容器 二元关联容器
单重关联容器 集合(set) 映射(map)
多重关联容器 多重集合(multiset) 多重映射(multimap)

二元组(pair)

二元关联容器的元素是由键类型和附加数据类型的组合,这种组合可以是用一个二元组(pair)来表示,pair是<utility>头文件总定义的结构体模板(如下)

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<int,double>的元素类型是pair<int,double>
multimap<string,int>的是pair<string,int>
pair类型对象构造支持列表初始化:

pair<string,int>str_int_pair={
    
    "first",2};

猜你喜欢

转载自blog.csdn.net/weixin_45720193/article/details/127579598