『C++进阶』第四章--- map与set

目录

1. 关联式容器

2.键值对

3. 树形结构的关联式容器

 3.1 set        

        3.1.1 set的介绍

3.2.2 set的使用

       1. set 的模板参数列表

 2. set的构造

3. set的迭代器

4.set的容量

5.set修改操作

 6. set的使用举例

3.2 map

  3.2.1 map的介绍

3.2.2 map的使用

     1. map的模板参数说明

2. map的构造

 3.map的迭代器

4. map的容器与元素访问

5. map中元素的修改

3.3 multiset

   3.3.1 multiset的介绍

3.3.2 multiset的使用

3.4 multimap

    3.4.1 multimap的介绍

3.4.2 multimap的使用

4. 底层结构


1. 关联式容器

      在初阶阶段,我们已经接触过STL中的部分容器,比如:vector、list、deque、forward_list(c++11)等,这些容器统称为序列式容器,因为其底层为线性序列的数据结构,里面存储的是元素本身。那什么是关联式容器? 它与序列式容器有什么区别?

       关联式容器也是用来存储数据的,与序列式容器不同的是,其里面存储的是<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.1 set        

        3.1.1 set的介绍

        set文档介绍

        翻译:

  1.  set是按照一定次序存储元素的容器
  2. 在set,元素的value也标识它(value就是key,类型为T),并且每个value必须是唯一的。set中的元素不能在容器中修改(元素总是const),但是可以从容器中插入或删除它们。
  3. 在内部,set中的元素总是按照其内部比较对象(类型比较)所指示的特定严格弱排序准则进行排序
  4. set容器通过key访问单个元素的速度通常比unordered_set容器慢,但它们允许根据顺序对子集进行直接迭代。
  5. set在哦底层是用二叉搜索树(红黑树)实现的。

注意: 

  1. 与map/multimap不同,map/multimap中存储的是真正的键值对<key,value>,set中只放value,但在底层实际存放的是由<value,value>构成的键值对。
  2. set中插入元素时,只需要插入value即可,不需要构造键值对。
  3. set中的元素不可以重复(因此可以使用set进行去重)。
  4. 使用set的迭代器遍历set中的元素,可以得到有序序列。
  5. set中的元素默认按照小于来比较
  6. set中查找某个元素,时间复杂度为o(log_2 n)
  7. set 中的元素不允许修改,因为会破坏整个树的结构与性质
  8. set中的底层使用二叉搜索树(红黑树)来实现。

3.2.2 set的使用

       1. set 的模板参数列表

 2. set的构造
函数声明 功能介绍
set (const Compare& comp = Compare(), const Allocator&
= Allocator() );
构造空的set
set (InputIterator first, InputIterator last, const
Compare& comp = Compare(), const Allocator& =
Allocator() );
用[first, last)区
间中的元素构造
set
set ( const set<Key,Compare,Allocator>& x); set的拷贝构造
3. set的迭代器
函数声明 功能介绍
iterator begin() 返回set中起始位置元素的迭代器
iterator end() 返回set中最后一个元素后面的迭代器
const_iterator cbegin() const 返回set中起始位置元素的const迭代器
const_iterator cend() const 返回set中最后一个元素后面的const迭代器
reverse_iterator rbegin() 返回set第一个元素的反向迭代器,即end
reverse_iterator rend() 返回set最后一个元素下一个位置的反向迭代器,
即rbegin
const_reverse_iterator
crbegin() const
返回set第一个元素的反向const迭代器,即cend
const_reverse_iterat
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值