C++ STL(第十四篇:Set 和 Map)

本文介绍了C++ STL中的Set、Map、multiset和multimap四种容器。Set和multiset元素自动排序且键值即为实值,不允许键值重复,Set的迭代器为const_iterator。Map和multimap则包含键值对,键值决定排序,允许键值重复。所有这些容器基于RB-tree实现,提供了高效的查找和操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、Set

set 的特性是,所有元素都会根据元素的键值自动被排序。set 的元素不像 map 那样可以同时拥有实值(value)和键值(key),set 元素的键值就是实值,实值就是键值。 set 不允许两个元素有相同的键值

因为 set 元素值就是其键值,关系到 set 元素的排列规则,如果任意改变 set 元素值,会严重破坏 set 组织。所以 set 的迭代器是 const_iterator,杜绝写入操作

set 拥有与 list 相同的某些性质:当客户端对它进行元素新增操作或删除操作时,操作之前的所有迭代器,在操作之后都依然有效。当然,被删除的那个元素的迭代器必然是个例外。

由于 RB-tree 是一种平衡二叉搜索树,自动排序的效果很不错,所以标准 STL set 即以 RB-tree 为底层机制。又由于 set 所开放的各种操作接口, RB-tree 也都提供了,所以几乎所有的 set 操作行为,都只是转调用 RB-tree 的操作行为而已。大概的代码如下:

template<class Key, class Compare = less<Key>, class Alloc = alloc>
class set
{
public:
	typedef Key key_type;
	typedef Key value_type;
	typedef Compare key_compare;	// key 的比较函数
	typedef Compare value_compare;	// value 的比较函数
	typedef rb_tree<......> rep_type;
	typedef typename rep_type::const_pointer pointer;  //一堆跟萃取有关的类型,都是 const 的
	......	
	rep_type t;						// 底层采用红黑树来表现 set
	
public:
	set();		//一系列重载函数
	
	i
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值