C++ STL之关联容器(C++ primer,P702)

关联容器将 value(值)与 key(键)关联在一起,并使用 key 来查找 value;

关联容器的优势是,提供元素的快速访问,也允许插入元素(但是不能固定位置插入)

STL提供了四种有序关联容器:(底层都是树)

  • set: 集合,key 唯一且 key 就是 value
  • multiset: key 不唯一
  • map: key 与 value 不同,key 唯一
  • multimap: key 不唯一

set

  • < set > 头文件
  • 可反转、排序
  • 集合的并集、交集、差集
    • set_union( ):并集
    • set_intersection( ):交集
    • set_difference( ):A减A并B
  • 边界方法
    • .lower_bound( a ):迭代器指向第一个不小于 a 的元素;
    • .upper_bound( b ):指向第一个大于 b 的元素;

一些函数用法:

#include <iostream>
#include <algorithm>
#include <iterator>
#include <string>
#include <set>
	...
set<string> A = {...}, B = {...}//将A U B依次插入到C中(注意不能用copy)
set<string> C;
set_union(A.begin(), A.end(), B.begin(), B.end(), 
		  insert_iterator<set<string> >(C, C.begin()));
//输出C中大于等于“ghost”,小于“spook”的元素
copy(C.lower_bound("ghost"), C.upper_bound("spook"), 
	 ostream_iterator<string, char>(cout, "\n"));

multimap

#include <iostream>
#include <algorithm>
#include <string>
#include <map>
	
typedef multimap<int, string> MapCode;
...
multimap<int, string> codes;
...
//在codes中查找 key == 718 的容器并输出其 value
pair<MapCode::iterator, MapCode::iterator> range = codes.equal_range(718);

for (auto it = range.first; it != range.second; ++it)
	cout << it->second << endl;

需要注意的是,equal_range返回的是一个pair<MapCode::iterator, MapCode::iterator>的二元组,组内两个元素都是查找类的迭代器;前一个指向第一个 key == 718 的容器,
后一个指向第一个 key != 718 的容器(类似begin与end);

无序关联容器

底层是基于数据结构hash表的;

  • unordered_set
  • unordered_multiset
  • unordered_map
  • unordered_multimap
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值