map和set的使用

一、关联式容器 键值对

序列式容器
vector、list、deque等,这些容器统称为序列式容器,因为其底层为线性序列的数据结构,里面存储的是元素本身。

关联式容器
也是用来存储数据的,与序列式容器不同的是,其里面存储的是<key, value>结构的键值对,在数据检索时比序列式容器效率更高

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

源码中关于键值对的描述:

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)
 {
   }
};

根据应用场景不同,STL总共实现了两种不同结构的关联式容器:树型结构与哈希结构。树型结构的关联式容器主要有四种:map、set、multimap、multiset。这四种容器的共同点是:使用平衡搜索树(即红黑树)作为其底层结构,容器中的元素是一个有序的序列。

二、pair 和 make_pair

在这里插入图片描述
这个类将一对可能是不同类型的值(T1 和 T2)耦合在一起。 可以通过其公共成员first和second访问各个值,键值对就是这样被耦合在一起的,这有许多益处,比如用pair类型作为返回值,可以同时返回键值对的两个数据。

make_pair用来构造一个 pair 对象,它的第一个元素设置为 x,第二个元素设置为 y,在map和set中会经常使用:
在这里插入图片描述
在这里插入图片描述

三、K模型 & KV模型

K模型和KV模型都是二叉搜索树的应用:
K模型
K模型即只有key作为关键码,结构中只需要存储Key即可,关键码即为需要搜索到的值。

KV模型
每一个关键码key,都有与之对应的值Value,即<Key, Value>的键值对。
比如:实现一个简单的英汉词典,可以通过英文找到与其对应的中文,实现方式如下:

<单词,中文含义>为键值对构造二叉搜索树,注意:二叉搜索树需要比较,键值对比较时只比较
Key
查询英文单词时,只需给出英文单词,就可快速找到与其对应的Value

四、set

  1. set是按照一定次序存储元素的容器

  2. 在set中,元素的key标识它,类型为T

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

神奇dyl

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值