map和set

1.容器的分类(讲解关联式容器)

序列式容器:vector/list/deque/stack/queue(线性结构可以随机插入)
关联式容器:map/set(1.不可以随机插入;元素之间具有关联,2.其里面存储的是<key, value>结构的键值对,在数据检索时比序列式容器效率更高)

2.键值对

**用来表示具有一一对应关系的一种结构,该结构中一般只包含两个成员变量key和value,key代表键值,value表示与key对应的信息。**比如:现在要建立一个英汉互译的字典,那该字典中必然有英文单词与其对应的中文含义,而且,英文单词与其中文含义是一一对应的关系,即通过该应该单词,在词典中就可以找到与其对应的中文含义。

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

template <class T1, class T2>
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、multiset。这四种容器的共同点是:使用平衡搜索树(即红黑树)作为其底层结果,容器中的元素是一个有序的序列。下面一依次介绍每一个容器。

3.1set(是k模型没有修改的权限)(不可有重复的)

** 头文件**:

3.1.1set的介绍

set文档介绍

3.1.2set的类模板

在这里插入图片描述

3.1.3 接口介绍
3.1.3.1 insert

** 功能**
排序+去重;

定义

在这里插入图片描述
这两种函数定义多使用第一个;
第一定义中的bool是判断插入是否成功;

第一个定义:

在这里插入图片描述
这里注意pair对象在类外定义时,要将迭代器的模板加上;
在这里插入图片描述

3.1.3.2 find

在这里插入图片描述

3.1.3.3 erase
定义

在这里插入图片描述
在这里插入图片描述

3.1.3.4 lower_bound和upper_bound

两者都是参数是set中的值返回指针;
前者返回>=val值的位置
后者返回>val值位置
在这里插入图片描述

3.1.3.5 equal_range

在这里插入图片描述

3.1.3.6 count

在这里插入图片描述
这一函数找到就返回1,没找到就返回0;
在这里插入图片描述

3.1 multiset(允许相同数字插入)(可以有重复的)

头文件

大部分接口和set一样;但是也有下面几种接口不同;
insert(插入)

功能:排序;没有了去重的功能;

find

功能:有多个相同值时;返回第一个成员的地址;
在这里插入图片描述

multiset的equal_range作用:(可以将相同的删除)

在这里插入图片描述
在这里插入图片描述
** 但是**最简单删除相同的方法:erase(所选的数)
在这里插入图片描述

3.3map(是kv模型)(不可有重复的)

3.3.定义

在这里插入图片描述

3.3.1构造函数

注意两个模板参数
在这里插入图片描述
示例:
在这里插入图片描述

3.3.2insert

在这里插入图片描述
解释value_type
在这里插入图片描述
insert的实现:
1.使用匿名对象进行拷贝构造 来插入;(由括号内的匿名对象拷贝构造成形参类型)
在这里插入图片描述
2.使用make_pair函数
定义:
在这里插入图片描述
使用:
在这里插入图片描述

类型不同却能构造的原因:

在这里插入图片描述

3.3.3迭代器

在这里插入图片描述
使用范围for时:
由于map是自定义类型;使用深拷贝消耗过大;所以建议使用引用
在这里插入图片描述
注意这里的for循环内的对象是pair且是map类内的

3.3.4 【】

定义

在这里插入图片描述
这里传输k的值【】会查找map中的相同k的元素并返回v的引用;

源码

在这里插入图片描述
这里使用insert函数;而且型参数是k和v的默认构造函数;

使用insert函数的原因:

在这里插入图片描述
insert的返回值是一个pair
成功返回新插入的节点位置和ture
失败返回已经存在的key所在节点位置和false;

简化版源码

在这里插入图片描述

应用

在这里插入图片描述
在这里插入图片描述
set和map的insert的对比;
在这里插入图片描述

3.4multimap(kv模型)可以实现重复

和map相同但是没有【】;
示例:
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值