c++——map和set
创始人
2024-12-16 09:36:25
0

1.关联式容器

在初阶阶段,我们接触过STL中的部分容器,比如; vector list deque等,这些容器被称为序列式容器,因为底层为线性序列的数据结构,里面储存的是元素本身,那什么是关联式容器呢?它与序列式容器有什么区别?

关联式容器存储的也是数据,与序列式容器不同的是,里面存储的是结构的键值对,在数据检索时比序列式容器更高效。

2.键值对

用来表示具有一一对应关系的一种结构,该结构中一般存储两个变量,key表示键值,value表示与key对应的信息;

比如:现在建立一个英汉互译的词典,那么字典中英文单词必然对应一个中文意思,那么找到该单词,就能找到其对应的中文含义

SGI-STL中关于键值对的定义:

template  struct pair { typedef T1 first_type; typedef T2 second_type; T1 first; T2 second; pair(): first(T1()), second(T2()) {} pair(const T1& a, const T2& b): first(a), second(b) {} };

3.树形结构的关联式容器

STL总共实现了两种不同结构的关联式容器:树形结构和哈希结构;

树形结构的关联式容器主要有四种: map set multimap mmultiset . 这四种容器的共同点是使用平衡二叉树(红黑树)作为底层结果,容器中的元素是一个有序的序列;

3.1 set

1.set的模板参数列列表

T:set存放的类型,实际在底层存储的键值对

compare: set中默认按照小于来比较

2.set的修改操作

insert可以插入数据,当插入已有元素的时候,他会不执行插入操作,也就是set可以去重,默认的set是按升序排序,可以去重的

erase支持迭代器删除,也可以删除值为val的元素,也可以删除区间元素,比如:

clear()可以清理set里的元素,清空size;

注意:

1.set中的元素不能修改。可以从容器中插入或者删除,

2.set可以使用迭代器遍历元素,得到有序序列,

3.set查找元素,时间复杂度是logN,

4.set的底层使用二叉搜索树(红黑树)来实现;

3.2 multiset

multiset可以不去重,允许有重复的元素出现,也是默认按照升序的方式打印出来

注意:

multiset和set的区别就是multiset中的元素可以重复

3.3 map

1.map是关联容器,他按照特定的次序(按照key来比较)存储由键值key和值value组合而成的元素,

2.在map中,键值key通常用于排序和唯一的标识元素,而值value中存储于此键值key相关联的内容,key和value的类型可能不同,并且在map内部,key与value通过成员类型value_type绑定在一起,取名为pair

int main() { 	map dict;  	pair kv1("sort", "排序"); 	dict.insert(kv1);//构造一个pair类,kv1插入  	dict.insert(pair("right", "右边"));//匿名对象pair  	dict.insert(make_pair("left", "左边"));//make_pair是一个函数模板,返回的pair  	dict.insert({ "string","字符串" });//隐式类型转换  	map::iterator it = dict.begin(); 	while (it != dict.end()) 	{ 		//cout << (*it).first << ":" << (*it).second << "\n"; 		 		//map中key不能修改,value可以修改 		//it->first += 'x'; 		it->second += 'x'; 		cout << it->first << ":" << it->second << "\n";  		it++; 	}  	//operator[]的用法 	//operator[]可以修改key对应的value,如果key不存在,那么就插入一个新的key 	//如果key存在,那么就可以更改对应的value 	dict["string"] = "好字符串";  	return 0; }

3.4 multimap

multimap和map的区别就是multimap中key是可以重复的

multimap没有重载operator[]操作;

相关内容

热门资讯

出乎意料的是!爱来大菠萝挂,都... 出乎意料的是!爱来大菠萝挂,都莱大菠萝辅助器(其实有挂神器)-哔哩哔哩1、操作简单,无需都莱大菠萝辅...
教你透视!wejoker私人辅... 教你透视!wejoker私人辅助软件,wepoker辅助插件功能,切实有辅助神器(哔哩哔哩)1、完成...
此事引发网友热议!92营口辅助... 此事引发网友热议!92营口辅助,途游大作战辅助(好像是有挂)-哔哩哔哩1、途游大作战辅助有没有辅助教...
辅助透视!德扑圈透视,德普之星... 辅助透视!德扑圈透视,德普之星透视辅助插件,本来有辅助教程(哔哩哔哩)1、在插件功能辅助器技巧中,中...
现有关情况通报如下!海盗来了辅... 现有关情况通报如下!海盗来了辅助器最新,九九联盟后台可以操作吗(切实有挂工具)-哔哩哔哩1、九九联盟...
这一问题亟待解决!闲逸免费ap... 这一问题亟待解决!闲逸免费app辅助,拱趴大菠萝辅助工具是真的吗(真是有挂插件)-哔哩哔哩运拱趴大菠...
解密透视!wejoker免费脚... 解密透视!wejoker免费脚本,wepoker底牌透视,一直是真的有辅助攻略(哔哩哔哩)1、很好的...
有了最新消息!张同学俱乐部开挂... 有了最新消息!张同学俱乐部开挂系统,微信欢乐卡五星辅助(一直存在有修改器)-哔哩哔哩1、实时张同学俱...
必备透视!wpk模拟器是什么,... 必备透视!wpk模拟器是什么,wpk辅助软件,真是有辅助工具(哔哩哔哩)1、公共底牌简单,透视插件操...
曝光透视!wepoker透视辅... 曝光透视!wepoker透视辅助下载,wepoker辅助器软件下载,本来是有辅助教程(哔哩哔哩)1、...