map+set-----map篇

目录

map初识

key和value用pair来表示

与set不同的是多了个operator[]

如何定义一个map类型的对象并且插入一个值呢?

如下有4种方法

第一个表示

第二个表示

第三个表示

第四个表示

make_pair参考图

还有一种方法,就是所有的容器都支持initializer_list

cout打印

当然为什么打印出来的结果是跟刚开始的定义的花括号里面的内容顺序不同呢?

还有一种方法就是用->箭头来表示如下解释:

可以使用第一种,但是一般都用第二种

当然如果用范围for时也要注意:

扩展:有些书上或者课上会看到如下方式C++17遍历:

最后展示查找单词代码如下:

展示统计次数代码如下:

operator[]

含义:

operator其实是可以做插入+修改的。

multimap

结尾:


map初识

key和value用pair来表示

pair是一个键值对,其实就是用一个结构体来存key和value

first不能修改,就是key的值不能修改。



map参考链接

与set不同的是多了个operator[]

如何定义一个map类型的对象并且插入一个值呢?

如下有4种方法

解释:

第一个表示

定义一个有名对象,传值

第二个表示

定义一个匿名对象,传值

第三个表示

函数模版make_pair,见字如面,传两个参数即可。

第四个表示

多参数的构造,用花括号来定义, 隐式类型转换。

当然推荐使用后两种。

make_pair参考图

还有一种方法,就是所有的容器都支持initializer_list

外层是initializer_list,内层是隐式类型转换。

cout打印

当然如果直接打印*it,则会报错,因为pair没有重载流提取,所以要用pair里面的成员,因为pair是个结构体,所以可以使用如下图解释:

当然为什么打印出来的结果是跟刚开始的定义的花括号里面的内容顺序不同呢?

因为string类型在map里也是根据搜索二叉树的规则来排序,string也就是用ASCII码来比较的。

还有一种方法就是用->箭头来表示如下解释:

it->调用operator->,返回的是节点的指针,节点是个结构体pair,所以写成it->->first,

为了方便观察,省略了一个->,所以最终的表示方式是:it->first。

可以使用第一种,但是一般都用第二种

 其实这里才是最常用operator->的地方,因为有pair这个结构体。

当然如果用范围for时也要注意:

以上的代码也很坑,因为自定义类型,数据量大,全是深拷贝,如果是整形那无所谓,但是是自定义类型要像如下写:

扩展:有些书上或者课上会看到如下方式C++17遍历:

上述代码是C++17的,如下图可以更改默认的C++语言标准。

最后展示查找单词代码如下:

展示统计次数代码如下:

operator[]

含义:

opreator[]的参数是key,operator[key]表示value。

operator其实是可以做插入+修改的。

可以通过一下代码来在VS上测试。

 

multimap

multimap允许建值冗余。

以及没有提供[],因为如果有[],多个同样的pair,那应该返回谁的呢?这很像调用函数时,如果有多个同样的函数,会冲突。

结尾:

所以如果想深入理解并使用的话,需要查看文档解析,以及做OJ题来巩固key和key/value的知识体系。

map - C++ Reference---map参考

multimap - C++ Reference ---multimap参考

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值