关联式容器
键值对
set简介
set的常用接口
构造函数
set的迭代器
set的容量
修改相关接口
find()函数
insert()函数
erase()函数
clear()函数
count函数
lower_bound()函数
upper_bound()函数
multiset简介
map简介
map的常用接口
构造函数
map的迭代器
map的容量
修改相关接口
insert()函数
1. 有名对象构造pair
2. 匿名对象构造pair
3. make_pair()函数构造pair
4.{ }构造
示例:
元素访问operator[ ]
示例
multimap简介
关联式容器
STL中的部分容器vector、list、deque、forward_list(C++11)等,这些容器统称为序列式容器,因为其底层为线性序列的数据结构,里面存储的是元素本身;
关联式容器也是用来存储数据的,与序列式容器不同的是,其里面存储的是结构的键值对,在数据检索时比序列式容器效率更高;
键值对
键值对是表示具有一一对应关系的一种结构,该结构中一般只包含两个成员变量key和value,key代表键值,value表示与key相对应的信息;
//键值对 template struct pair { T1 first;//key T2 second;//value //键值对构造函数 pair() :first(T1()) , second(T2()) {} //键值对拷贝构造函数 pair(const T1& a, const T2& b) :first(a) , second(b) {} };
set简介
- set是按照一定次序存储元素的容器并且set中的元素不可以重复;
- set中只存放value,但set底层实际存放由所构成的键值对,元素的value也标识它(value即为key,类型为T),并且每个value必须是唯一的;set中的元素不能在容器中修改(元素总是const),但是可以从容器中插入或删除元素;
- 在内部,set中的元素总是按照其内部比较对象(类型比较)所指示的特定严格弱排序准则进行排序;
- set容器通过key访问单个元素的速度通常比unordered_set容器慢,但它们允许根据顺序对子集进行直接迭代;
- set在底层是用二叉搜索树(红黑树)实现的;
set官方文档:set - C++ Reference
set的常用接口
构造函数
//无参构造: set s1 set(); //迭代器区间构造[begin,end): set s2(s1.begin,s1.end) template set(InputIterator first, InputIterator last); //拷贝构造: set s3(s1) set(const set& x);
set的迭代器
set的容量
修改相关接口
find()函数
若在set容器中查找到值为val的元素,则返回val元素所在的位置;
若在set容器中查找不到值为val的元素,则返回set容器中最后一个元素的下一个位置;
insert()函数
pair insert (const value_type& val);
在set容器中插入元素val,若元素插入成功,返回;
若插入元素失败,说明val已存在于set容器中,返回;
iterator insert (iterator position, const value_type& val);
在set容器中的pos位置插入元素val,插入成功返回新插入元素val在set中的位置,插入失败返回已存在的元素val在set中的位置;一般配合find()函数使用;
int main() { set s1; s1.insert(5); s1.insert(4); s1.insert(3); s1.insert(6); s1.insert(7); s1.insert(1); s1.insert(5); set::iterator it = s1.begin(); while (it != s1.end()) { cout