map和set和是关联容器,和vector、list之类的不同,map和set一次存两个值,存的是是一个键值对,对于map存的是<key,value>,对于set存的是<value,value> 。
map
map的构造函数
- map<type,type> m1;
- map<type,type> m2(m1.begin(),m1.end());
- map<type,type> m3(m2);
map支持迭代器。
map的接口
- bool empty()const 判断是否为空
- void clear() 清空map
- pair<iterator,bool> insert(const value_type& val) 键值对插入
- iterator insert (iterator position, const value_type& val); 迭代器插入
- void swap(map&) 交换两个map的值
- iterator find (const key_type& k); 查找值为key的键值对
- size_type size() const; 返回大小
- mapped_type& operator[] (const key_type& k); 方括号是值得注意的,如果key存在,则返回对应的value,如果不存在,会与默认的value构造键值对,然后返回。
更多详细接口
map 相关介绍
- 在内部,map是按照键值 key 来排序的
- 允许下标访问
- 比较器默认按小于比较
set
set的构造函数
- set< type > s1;
- set< type > s2(array,array+lenth);
- set< type > s3(s2);
- set< type > s4(s3.begin(),s3.end());
支持迭代器
set的接口
- bool empty()const 检测set是否为空
- size_type size()const 返回set中有效元素的个数
- pair<iterator,bool> insert (const value_type& val); 插入元素
- void erase (iterator position); 删除position位置上的元素
- size_type erase (const value_type& val); 删除值为 val的元素,返回删除的个数
- viod clear(); 清空set
- iterator find (const value_type& val) const; 查找val的元素,返回位置。
更多详细接口
set的相关介绍
- set 中的元素不可以重复(可以用set去重)
- set中元素不能修改(要修改一个元素,先删除他,在插入你修改后的值)
- set 中的元素默认按小于来比较
- 使用迭代器遍历,可以得到有序的序列
multimap和map的区别在于,multimap中的key可以重复
multiset和set的区别在于,multiset中的key可以重复