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算法

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

泠山

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

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

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

打赏作者

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

抵扣说明:

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

余额充值