关联容器的基本操作简单总结

C++ STL中标准关联容器set, multiset, map, multimap内部采用的就是一种非常高效的平衡检索二叉树:红黑树,也成为RB树(Red-Black Tree)。RB树的统计性能要好于一般平衡二叉树,所以被STL选择作为了关联容器的内部结构。
这颗树具有对数据自动排序的功能,所以在map内部所有的数据都是有序的,后边我们会见识到有序的好处。
set&multiset
一,构建
set<int>s_val;
二,插入
s_val.insert(val);返回值:pair<set<int>::iterator,bool>;bool标志是否成功,前一个表示插入位置。若里面已经有此元素,则返回原元素的位置。
三,大小
s_val.size();元素的个数。
四,查找
count(val): 返回容器中值等于val的元素数目。
find(val): 返回容器中值等于val的第一个元素的iterator位置;如果没有匹配元素,则返回end()位置。
lower_bound(val): 返回容器中第一个值大于或等于val的元素的iterator位置。
upper_bound(val): 返回容器中第一个值大于val的元素的iterator位置。
equal_range(val): 返回容器中值等于val的所有元素的范围[beg, end)组成的pair<beg, end> 
五,判空&清空
s_val.clear()清空
s_val.empty()判空
六,删除
s_val.erase(val):删除容器中所有值为val的元素,返回删除元素的数目
s_val.erase(pos):删除位置为pos的元素。没有返回值。
s_val.erase(begin,end):删除范围内的所有元素。
七,遍历
set<int>::iterator iter;
iter=s_val.begin()第一个元素。
s_val.end()最后一个元素的下一个元素,
set<int>::reverse_iterator riterl;
riter=s_val.rbegin();最后一个元素。
s_val.rend(); 第一个元素的前一个元素。

map&&multimap
一,map构造方法:
map<int,string>map_ins;
二,map的插入:
1,insert()返回值:pair<set<int>::iterator,bool>;bool标志是否成功,前一个表示插入位置。若里面已经有此元素,则返回原元素的位置。
pair<int,string>p(v1,v2);
map_ins.insert(p);
while()
{
map_ins.insert(make_pair(v1,v2));
}
2,map_ins.inser(map<int,string>::value_type(v1,v2))
3,map_ins[1]="fdaslj";
三,map的大小
int nsize=map_ins.size();
四,数据的查找
1,用count函数来判定关键字是否出现,其缺点是无法定位数据位置,只有0和1
2,用find(第一个val)函数,如果有要找的数据则返回其元素的位置,否则返回end。
3,lower_bound(val),第一个返回容器中第一个key值大于或者小于val的元素的位置
   upper_bound(val)返回第一个key值大于val的元素的iterator的位置
4,equel_range(val):返回容器中等于val的所有元素的范围[beg, end)组成的pair<beg, end>;
五,数据的清空和判空;
clear()清空,empty()判空。
六,数据的删除
map_ins.erase(val):删除容器中所有key值为val的元素,成功返回删除元素的数目,否则0;
map_ins.erase(pos):删除位置为pos的元素。没有返回值。
map_ins.erase(begin,end):删除范围内的所有元素。
七,数据的遍历
map<int,string>::interator iter;
for(iter=map_ins.begin();iter!=map_ins.end();iter++)
  iter->second;
或者从后往前:
map<int,string>::reverse_interator riter;
rter.rbegin,容器中的最后一个元素。
rter.end,容器中的第一个元素的前一个元素。

你可能感兴趣的:(c,String,tree,iterator,insert,pair)