C++中set和map的使用

1.关联式容器

序列式容器里存储的是元素本身,如vector、list、deque

关联式容器即,容器中存储<key,value>的键值对 ,树型结 构的关联式容器主要有四种:map、set、multimap、multiset 。他们都使用**平衡搜索树(即红黑树)**作为其底层结果,容器中的元素是一个有序的序列。

2.键值对

**键值对即用来表示具有一一对应关系的一种结构,该结构中一般只包含两个成员变量key和value,key代表键值,value表示与key对应的信息。**类似如下结构

cpp 复制代码
template<class T1,class T2>
class pair{
public:
    T1 first;
    T2 second;

pair(): first(T1()), second(T2())
{}
 
pair(const T1& a, const T2& b): first(a), second(b)
{}
};

3.set的使用

在set中,元素的value也标识它(value就是key,类型为T),并且每个value必须是唯一的。 set中的元素不能在容器中修改(元素总是const),但是可以从容器中插入或删除它们。

set包含于<set>中

3.1set的定义

cpp 复制代码
set<int> s_int;

3.2set的主要操作

set不允许相同值插入若插入成功会返回pair<指向其的迭代器,成功>,插入失败会返回pair<指向原有值的迭代器,失败>

erase常用(2)直接删除指定值

find可以寻找值,返回其迭代器

4.map的使用

在map中,键值key通常用于排序和惟一地标识元素,而值value中存储与此键值key关联的内容。键值key和值value的类型可能不同,并且在map的内部,key与value绑定在一起,为其取别名称为pair

map包含于<map>

4.1map的定义

4.2map的主要操作

map的主要操作与set类似,insert不允许相同值插入

4.3map的operator\[\]

operator\[\] 能够访问包含对应key的pair的value

此操作也可解释为如下,即插入pair<key,value>取其返回的迭代器解引用的second,即返回对应key的value

使用实例如下

cpp 复制代码
map<string,string> m;

m["left"] = "左";//map中不存在此key,表示插入+修改
m["left"] = "左、剩余";//map中已存在此key,表示修改
m["insert"];//表示修改
cout << m["insert"];//表示查找

5.multimap、multiset

multimap、multiset即允许多个相同key存在的map和set。

set与multiset操作区别有:

1.find查找时,多个x在树中返回第一个x(中序的第一个)

2.插入时,允许相同值插入

3.erase会删除所有x

map与multimap操作区别有:

1.find查找时,多个x在树中返回第一个x(中序的第一个)

2.插入时,允许相同值插入

3.erase会删除所有x

4.无operator\[\]

相关推荐
Dxy12393102166 分钟前
JS DES 加密详解
开发语言·javascript·arcgis
充值内卷6 分钟前
我给桌面加了个鱼缸:C++ 写后端,WebView2 里养一座 Three.js 小岛
开发语言·javascript·c++
云和数据.ChenGuang19 分钟前
深入解析 Python 的 dir():从用法到 CPython 源码实现
开发语言·人工智能·python·langchain
nice_lcj5201 小时前
深入理解 Java 反射:从 Class 对象到方法调用(含性能实测 + 迷你 IOC 实战 + 面试考点)
java·开发语言·后端·面试
樱花树下的数学喵3 小时前
手写简易 STL string|C++ 字符串底层实现
开发语言·c++
AI吃大瓜3 小时前
指针压力表读数3:C/C++实现指针压力表读数(可实时检测)
c++·指针读数·指针压力表·压力表自动读数·压力表读数
-银雾鸢尾-3 小时前
两数之和-C++实现
c++·算法
j7~3 小时前
【动态规划算法专题】动态规划五部曲实战:泰波那契数、三步问题、最小花费爬楼梯
c++·算法·动态规划·数据结构与算法
jimy13 小时前
C++ 报错的 qualifiers 的意思
开发语言·c++
揽星河..4 小时前
【C++】类和对象
c++·算法