IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> C++ STL关联式容器 -> 正文阅读

[C++知识库]C++ STL关联式容器


Reference:

  1. 明日科技 《零基础学 C++》

关联式容器(associative)是 STL 提供的容器的一种,其中的元素都是经过排序的,它主要通过关键字的方式来提高查询的效率。关联式容器包括 set、multiset、map、multimap 和 hash table。

1. set 类模板

set 类模板又称为集合类模板,一个集合对象像链表一样顺序地存储一组值。在一个集合中,集合元素既充当存储的数据,又充当数据的关键码。
可以使用下面的几种方法来创建 set 对象:

  • std::set<type,predicate> name:该方法创建了一个名为 name,并包含 type 类型数据的 set 空对象,该对象使用谓词所指定的函数来对集合中的元素进行排序。例如,要给整数创建一个空 set 对象,可以这样写:

std::set<int,std::less<int> > intset; // 注意,less<int> 表达式后要用空格

  • std::set<type,predicate> name(myset):该方法使用了复制构造函数,从一个已存在的集合 myset 中生成一个 set 对象;
  • std::set<type,predicate> name(first,last):该方法从一定范围的元素中根据多重指示器所指示的起始与终止位置创建一个集合。

1.1 set 对象主要成员函数及说明

函数说明
begin返回指向集合中第一个元素的迭代器
clear删除集合中所有元素
cout(x)返回集合中值为 x (0 或 1) 的元素个数
empty如果集合为空,则返回 true 值
end返回指向集合中最后一个元素的迭代器
equal_range(x)返回表示 x 下界和上界的两个迭代器,下界表示集合中第一个值等于 x 的元素,上界表示第一个值大于 x 的元素
erase(start,end)删除迭代器 start 和 end 所辖范围内的集合元素
erase(i)删除由迭代器 i 所指向的集合元素
erase(x)删除集合中值为 x 的元素
find(x)返回一个指向 x 的迭代器。如果 x 不存在,返回的迭代器等于 end
insert(i,x)把值 x 插入集合。x 的插入位置从迭代器 i 所指明的元素处开始查找
insert(start,end)把迭代器 start 和 end 所指范围内的值插入集合中
insert(x)把 x 插入集合
lower_bound(x)返回一个迭代器,指向位于 x 之前且紧邻 x 的元素
max_size返回集合的最大容量(最多可以容纳的元素个数)
rbegin返回一个反向迭代器,指向集合的最后一个元素
rend返回一个反向迭代器,指向集合的第一个元素
size返回集合的大小
swap(set)交换两个集合的内容
upper_bound(x)返回一个指向 x 的迭代器
value_comp返回 value_compare 类型的对象,该对象用于判断集合中元素的先后次序

2. multiset 类模板

multiset 使程序能顺序存储一组数据。与集合类类似,多重集合的元素既可以作为存储的数据又可以作为数据的关键字。然而,与集合类不同的是多重集合类可以包含重复的数据。下面列出了几个创建多重集合的语句:

  • std::multiset <type,predicate> name:该方法创建了一个名为 name,并包含 type 类型数据的 multiset 空对象,该对象使用谓词所指定的函数来对集合中的元素进行排序。例如,要给整数创建一个空 multiset 对象,可以这样写:

std::multiset <int,std::less<int> > intset; // 注意,less<int> 表达式后要用空格

  • std::multiset <type,predicate> name(mymultiset):该方法使用了复制构造函数,从一个已存在的集合 mymultiset 中生成一个 multiset 对象;
  • std::multiset <type,predicate> name(first,last):该方法从一定范围的元素中根据指示器所指示的起始与终止位置创建一个集合。

2.1 multiset 对象主要成员函数及说明

函数说明
begin返回指向集合中第一个元素的迭代器
clear删除集合中所有元素
cout(x)返回集合中值为 x (0 或 1) 的元素个数
empty如果集合为空,则返回 true 值
end返回指向集合中最后一个元素的迭代器
equal_range(x)返回表示 x 下界和上界的两个迭代器,下界表示集合中第一个值等于 x 的元素,上界表示第一个值大于 x 的元素
erase(start,end)删除迭代器 start 和 end 所辖范围内的集合元素
erase(i)删除由迭代器 i 所指向的集合元素
erase(x)删除集合中值为 x 的元素
find(x)返回一个指向 x 的迭代器。如果 x 不存在,返回的迭代器等于 end
insert(i,x)把值 x 插入集合。x 的插入位置从迭代器 i 所指明的元素处开始查找
insert(start,end)把迭代器 start 和 end 所指范围内的值插入集合中
insert(x)把 x 插入集合
lower_bound(x)返回一个迭代器,指向位于 x 之前且紧邻 x 的元素
max_size返回集合的最大容量(最多可以容纳的元素个数)
rbegin返回一个反向迭代器,指向集合的最后一个元素
rend返回一个反向迭代器,指向集合的第一个元素
size返回集合的大小
swap(set)交换两个集合的内容
upper_bound(x)返回一个指向 x 的迭代器
value_comp返回 value_compare 类型的对象,该对象用于判断集合中元素的先后次序

3. map 类模板

map 对象按顺序存储一组值,其中每个元素与一个检索关键码关联。map 与 set 和 multiset 不同,set 和 multiset 中元素既被作为存储的数据又被作为数据的关键值,而 map 类型中元素的数据和关键值是分开的。创建 map 类模板的语法格式如下:

  • std::map <key,type,predicate> name:该方法创建了一个名为 name,并包含 type 类型数据的 map 空对象,该对象使用谓词所指定的函数来对集合中的元素进行排序。例如,要给整数创建一个空 map 对象,可以这样写:

std::map <int,int,std::less<int> > intmap; // 注意,less<int> 表达式后要用空格

  • std::map <type,type,predicate> name(mymap):该方法使用了复制构造函数,从一个已存在的集合 mymap 中生成一个 map 对象;
  • std::map <type,type,predicate> name(first,last):该方法从一定范围的元素中根据多重指示器所指示的起始与终止位置创建一个集合。

3.1 map 对象主要成员函数及说明

函数说明
begin返回指向集合中第一个元素的迭代器
clear删除集合中所有元素
empty如果集合为空,则返回 true 值
end返回指向集合中最后一个元素的迭代器
equal_range(x)返回表示 x 下界和上界的两个迭代器,下界表示集合中第一个值等于 x 的元素,上界表示第一个值大于 x 的元素
erase(start,end)删除迭代器 start 和 end 所辖范围内的集合元素
erase(i)删除由迭代器 i 所指向的集合元素
erase(x)删除集合中值为 x 的元素
find(x)返回一个指向 x 的迭代器。如果 x 不存在,返回的迭代器等于 end
lower_bound(x)返回一个迭代器,指向位于 x 之前且紧邻 x 的元素
max_size返回集合的最大容量(最多可以容纳的元素个数)
rbegin返回一个反向迭代器,指向集合的最后一个元素
rend返回一个反向迭代器,指向集合的第一个元素
size返回集合的大小
swap(set)交换两个集合的内容
upper_bound(x)返回一个指向 x 的迭代器
value_comp返回 value_compare 类型的对象,该对象用于判断集合中元素的先后次序

4. multimap 类模板

multimap 能够顺序存储一组值,它与 map 相同的是每一个元素都包含一个关键值以及与之联系的数据项,与 map 不同的是多重映射可以包含重复的数据值,并且不能使用 [] 操作符向多重映射中插入元素。构造 multimap 类模板的语句如下:

  • std::multimap <key,type,predicate> name:该方法创建了一个名为 name,并包含 type 类型数据的 multimap 空对象,该对象使用谓词所指定的函数来对集合中的元素进行排序。例如,要给整数创建一个空 multimap 对象,可以这样写:

std::multimap <int,int,std::less<int> > intmap; // 注意,less<int> 表达式后要用空格

  • std::multimap <type,type,predicate> name(mymap):该方法使用了复制构造函数,从一个已存在的集合 mymap 中生成一个 multimap 对象;
  • std::multimap <type,type,predicate> name(first,last):该方法从一定范围的元素中根据多重指示器所指示的起始与终止位置创建一个多重映射。

相关 STL 文章:
C++ STL序列容器
C++ STL算法

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-07-23 10:32:07  更:2021-07-23 10:33:18 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年4日历 -2024/4/28 23:00:10-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码