map和set

        在本篇中,我们将要介绍两个常用的 STL 库中的两个数据结构,set 和 map,这两个函数的底层都是由红黑树实现的。本篇不会实现其底层原理,本篇只会将其其中的要点和使用时应该注意的地方。然后还会介绍关于 set 和 map 的两个扩展容器:multiset 和 multimap。

        目录如下:

目录

1. 关联式容器和键值对

关联式容器

键值对 pair

2. set

set 的使用

modified -- set

otheroperation -- set

3. map 

map 的使用

modified -- map

otheroperation -- map

 operator[ ] -- map

4. multiset multimap

multiset

multimap

1. 关联式容器和键值对

关联式容器

        对于 STL 容器而言,存在序列式容器,如:vector、list、deque、forward_list等,其底层实现为线性序列数据结构,其中存储是元素本身。

        本篇将要介绍是关联式容器 map 和 set,关联式容器也是用来存储数据的,与序列式容器不同的是,其中存储的为 <key, value> 结构的键值对,在数据检索时比序列式容器效率更高

键值对 pair

        在讲解 map 和 set 之前,我们要先介绍一种结构,该结构只包含两种成员变量 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)
	{}
};

        在下文中,我们将要开始介绍两种树形结构的关联式容器 —— map 和 set。

2. set

        以下关于 set 的解释来源于:cplusplus.com/reference/set/set/?kw=set

        对于 set 的一些特性如下:

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

        2. set 中的元素不能被修改,因为是按照顺序存储的树形结构,修改之后很可能会影响其树形特性,我们只能增加和删除元素;

        3. 在树形结构内部,set 中的元素总是按照其内部比较对象所指示的特定严格弱排序准则进行排序;

        4. set 底层是用二叉搜索树(红黑树)实现。

        5. set容器通过key访问单个元素的速度通常比unordered_set容器慢,但它们允许根据顺序对子集进行直接迭代。
        6. set 中的元素不会存在相同键值的元素。

set 的使用

        关于 set 的使用,对于 set 的模板参数列表如下:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值