map和set

一、介绍

之前的 vector list deque 是序列式容器,map set 是关联式容器,即不仅存数据,数据之间还有关联。

set 是 key 模型,map 是 key-val 模型,二者底层是红黑树。

二、set

set 无法存储相同的 key,作用是排序 + 去重

multiset 可以存储相同的 key,其 find 函数用于找到中序遍历的第一个 key

在构造函数中可以传入比较函数进行排序

值得注意的是插入函数返回的是一个 pair 绑定了插入元素的迭代器和是否插入成功

三、map

pair 是键值对,能一次返回两个值

在 map 里面,插入的 key-val 就是通过键值存储的,所以在 C++17 引入了一个新方法遍历 map

cpp 复制代码
map<string, string> dict;
for(auto [x, y] : dict)
{
    cout << x << ' ' << y;
}

迭代器获取 pair 后 x 赋值成 first,y 赋值成 second

重载 [] 也是非常重要有用的

实现代码:

cpp 复制代码
V& operator[](const K& key)
{
    return (*((insert(make_pair(key, mapped_type()))).first)).second;
}

用 key 和默认的 val 构成 pair 传给 insert 函数,函数返回迭代器,取出迭代器的第一个值 pair 的迭代器后返回 second

所以 [] 可以实现插入,插入+修改,修改的作用,不仅因为函数封装 insert,而且是 val 本身可以修改。

相关推荐
秋风&萧瑟22 分钟前
【QT】新建QT工程(详细步骤)
开发语言·qt
关注我:程序猿之塞伯坦44 分钟前
JavaScript 性能优化实战:突破瓶颈,打造极致 Web 体验
开发语言·前端·javascript
郭涤生1 小时前
第二章:影响优化的计算机行为_《C++性能优化指南》notes
开发语言·c++·笔记·性能优化
pursue_my_life2 小时前
Golang中间件的原理与实现
开发语言·后端·中间件·golang
@小匠2 小时前
使用 Python包管理工具 uv 完成 Open WebUI 的安装
开发语言·python·uv
code bean2 小时前
【C#】关键字 volatile
开发语言·c#
若汝棋茗2 小时前
C# 异步方法设计指南:何时使用 await 还是直接返回 Task?
开发语言·c#
程序员yt2 小时前
双非一本Java方向,学完感觉Java技术含量不高,考研换方向如何选择?
java·开发语言·考研
小宋要上岸2 小时前
基于 Qt / HTTP/JSON 的智能天气预报系统测试报告
开发语言·qt·http·json
MobiCetus2 小时前
如何一键安装所有Python项目的依赖!
开发语言·jvm·c++·人工智能·python·算法·机器学习