map和set是关联性容器,不像vector,list,deque,forward_list是序列式容器。
序列式容器底层是线性序列的数据结构,里边存储的是元素本身。关联式容器也是用来存储数据的,只不过它存储的是
用来表示一一对应的一种结构,该结构一般只包含两个成员变量key和value,key代表键值,value表示与key对应的信息。
STL总共实现了两种不同结构的管理式容器:树型结构与哈希结构。树型结构的关联式容器主要有四种:map、set、multimap、multiset。
1.底层是二叉搜索树
2.set的键值对实际是
3.set中value是唯一的
4.容器中不允许修改,因为元素总是const常量,但可以插入或删除
std::set first; // empty set of ints
int myints[]= {10,20,30,40,50}; //利用数组
std::set second (myints,myints+5); // range
std::set third (second); // a copy of second
std::set fourth (second.begin(), second.end()); // iterator ctor.
std::set fifth; // class as Compare
1.底层通常为平衡二叉搜索树
2.支持 [] 下标访问
3.按照特定次序储存元素
map() //构造一个空的map
begin()和end() //begin:首元素的位置,end最后一个元素的下一个位置
cbegin()和cend() //与begin和end意义相同,但cbegin和cend所指向的元素不能修改
rbegin()和rend() //反向迭代器,rbegin在end位置,rend在begin位置,其++和--操作与begin和end操作移动相反
crbegin()和crend() //与rbegin和rend位置相同,操作相同,但crbegin和crend所指向的元素不能修改
bool empty ( ) const //检测map中的元素是否为空,是返回true,否则返回false
size_type size() const //返回map中有效元素的个数
mapped_type& operator[] (const key_type& k) //返回去key对应的value
pair insert (const value_type& x )
//在map中插入键值对x,注意x是一个键值对,返回值也是键值对:iterator代表新插入元素的位置,bool代表释放插入成功
void erase ( iterator position ) //删除position位置上的元素
size_type erase ( const key_type& x ) //删除键值为x的元素
void erase ( iterator first,iterator last ) //删除[first, last)区间中的元素
void swap (map&mp ) //交换两个map中的元素
void clear ( ) //将map中的元素清空
iterator find ( const key_type& x) //在map中插入key为x的元素,找到返回该元素的位置的迭代器,否则返回end
const_iterator find ( const key_type& x ) const //在map中插入key为x的元素,找到返回该元素的位置的const迭代器,否则返回cend
size_type count ( const key_type& x ) const //返回key为x的键值在map中的个数,注意map中key是唯一的,因此该函数的返回值要么为0,要么为1,因此也可以用该函数来检测一个key是否在map中