stl-map/set
C++中map容器提供一個鍵值對(key/value)容器,map與multimap差別僅僅在于multiple允許一個鍵對應多個值。需要包含頭文件map。對于迭代器來說,可以修改實值,而不能修改key。Map會根據key自動排序。升序排序
?
//1.定義和初始化map<int,string> map1; //空map//2.常用操作方法map1[3] = "Saniya"; //添加元素map1.insert(map<int,string>::value_type(2,"Diyabi"));//插入元素//map1.insert(pair<int,string>(1,"Siqinsini"));map1.insert(make_pair<int,string>(4,"V5"));string str = map1[3]; //根據key取得value,key不能修改map<int,string>::iterator iter_map = map1.begin();//取得迭代器首地址int key = iter_map->first; //取得ekystring value = iter_map->second; //取得valuemap1.erase(iter_map); //刪除迭代器數據map1.erase(3); //根據key刪除valuemap1.size(); //元素個數map1.empty(); //判斷空map1.clear(); //清空所有元素//3.遍歷for(map<int,string>::iterator iter = map1.begin();iter!=map1.end();iter++){int keyk = iter->first;string valuev = iter->second;}?
map的基本操作函數:
??????C++ Maps是一種關聯式容器,包含“關鍵字/值”對
????? begin()????????? 返回指向map頭部的迭代器
????? clear()???????? 刪除所有元素
????? count()????????? 返回指定元素出現的次數
????? empty()????????? 如果map為空則返回true
????? end()?????????? ?返回指向map末尾的迭代器
??????equal_range()??? 返回特殊條目的迭代器對
??????erase()????????? 刪除一個元素
????? find()????????? ?查找一個元素
????? get_allocator()? 返回map的配置器
????? insert()???????? 插入元素
????? key_comp()?????? 返回比較元素key的函數
????? lower_bound()??? 返回鍵值>=給定元素的第一個位置
??????max_size()?????? 返回可以容納的最大元素個數
????? rbegin()???????? 返回一個指向map尾部的逆向迭代器
????? rend()?????????? 返回一個指向map頭部的逆向迭代器
????? size()?????????? 返回map中元素的個數
????? swap()??????????? 交換兩個map
????? upper_bound()???? 返回鍵值>給定元素的第一個位置
????? value_comp()????? 返回比較元素value的函數
set
set的含義是集合,它是一個有序的容器,里面的元素都是排序好的,支持插入,刪除,查找等操作,就像一個集合一樣。所有的操作的都是嚴格在logn時間之內完成,效率非常高。set和multiset的區別是:set插入的元素不能相同,但是multiset可以相同。Set默認自動排序。
常用操作:
1.元素插入:insert()
2.中序遍歷:類似vector遍歷(用迭代器)
3.反向遍歷:利用反向迭代器reverse_iterator。
?? ?例:
?? ?set<int> s;
?? ?......
?? ?set<int>::reverse_iterator rit;
?? ?for(rit=s.rbegin();rit!=s.rend();rit++)
4.元素刪除:與插入一樣,可以高效的刪除,并自動調整使紅黑樹平衡。
?? ??? ??? ?set<int> s;
?? ??? ??? ?s.erase(2);?? ??? ?//刪除鍵值為2的元素
?? ??? ??? ?s.clear();
5.元素檢索:find(),若找到,返回該鍵值迭代器的位置,否則,返回最后一個元素后面一個位置。
?? ??? ??? ?set<int> s;
?? ??? ??? ?set<int>::iterator it;
?? ??? ??? ?it=s.find(5);?? ?//查找鍵值為5的元素
?? ??? ??? ?if(it!=s.end())?? ?//找到
?? ??? ??? ??? ?cout<<*it<<endl;
?? ??? ??? ?else?? ??? ??? ?//未找到
?? ??? ??? ??? ?cout<<"未找到";
6.自定義比較函數
?? ?(1)元素不是結構體:
?? ??? ?例:
?? ??? ?//自定義比較函數myComp,重載“()”操作符
?? ??? ?struct myComp
?? ??? ?{
?? ??? ??? ?bool operator()(const your_type &a,const your_type &b)
?? ??? ??? ?[
?? ??? ??? ??? ?return a.data-b.data>0;
?? ??? ??? ?}
?? ??? ?}
?? ??? ?set<int,myComp>s;
?? ??? ?......
?? ??? ?set<int,myComp>::iterator it;
?? ?(2)如果元素是結構體,可以直接將比較函數寫在結構體內。
?? ??? ?例:
?? ??? ?struct Info
?? ??? ?{
?? ??? ??? ?string name;
?? ??? ??? ?float score;
?? ??? ??? ?//重載“<”操作符,自定義排序規則
?? ??? ??? ?bool operator < (const Info &a) const
?? ??? ??? ?{
?? ??? ??? ??? ?//按score從大到小排列
?? ??? ??? ??? ?return a.score<score;
?? ??? ??? ?}
?? ??? ?}
?? ??? ?set<Info> s;
?? ??? ?......
?? ??? ?set<Info>::iterator it;
總結
以上是生活随笔為你收集整理的stl-map/set的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: JDK8HashMap的扩容核心解读,尾
- 下一篇: stl-unique()函数去重