1. 程式人生 > >關聯容器

關聯容器

特定 color insert 類型 rgs second else word set

一個pair保存兩個數據成員,一個用來生成特定類型的模板

1 pair<string ,int > process(vector<string> &v){
2 if(!v.empty()){
3 return {v.back(),v.back().size()};//列表初始化
4 
5 }
6 else{
7 return pair<string,int >();//隱式構造返回值
8 }
9 }

map是值關鍵字對的集合,通常被稱為關聯數組,關聯數組與正常數組類似,不同之處在於下表不必是整數,而是通過一個關鍵字而不是一個位置來查找元素。

而set則是關鍵字的簡單集合。定義一個map時需要指明關鍵字類型,同事指明值類型,而set只需指明關鍵字類型,沒有值。

 1     pair<string,string> anon;
 2     map<string,int> word_count={{"zheng",26},{"wang",30}};
 3     pair<string ,vector<int> > line;//pair使用默認構造函數進行值初始化
 4     pair<string ,string> name={"james","joyce"};
 5     //pair的數據成員是public,其中兩個為first和second,map的元素就是pair
 6     string
v2,v1; 7 auto t=make_pair(v1,v2);// 8 //關聯容器的叠代器,當解引用yi一個關聯容器的叠代器時得到的是一個value_typed的值引用 9 auto map_it=word_count.begin(); 10 // cout<<map_it->first; 11 // cout<<" "<<map_it->second;//關鍵字是const類型不能修改 12 ++map_it->second; 13 auto map_it1=word_count.cbegin();
14 while (map_it1!=word_count.cend()){ 15 cout<<map_it1->first<<"occurs" <<map_it1->second<<"times"<<endl; 16 ++map_it1; 17 }

 1     //set的叠代器是const類型,只能讀
 2 //關聯容器的insert成員向容器中添加一個或刪除一個元素,插入一個已存在的元素對容器沒有影響
 3     vector<int> ivec1={2,4,6,8,2,4,6,8};
 4     set<int> set2;
 5     set2.insert(ivec1.cbegin(),ivec1.cend());//接受一個叠代器和一個初始化列表
 6     set2.insert({1,3,5,7,1,3,5,7});
 7     word_count.insert({"fsf",2});
 8     word_count.insert(make_pair("gjkihl",1));
 9     word_count.insert(pair<string,size_t>("fse",1));
10     word_count.insert(map<string,size_t>::value_type("fsfdf",1));
1 void count1(){
2     map<string,size_t> word_count;
3     string word;
4     while(cin>>word){
5         auto ret =word_count.insert({word,1});
6         if(!ret.second)
7             ++ret.first->second;
8     }
9 }

 1     /*c.insert(v);
 2     c.empalce(args);
 3     c.insert(b,e);
 4     c.insert(il);
 5 
 6     c.insert(p,v);
 7     c.emplace(p,args);*/
 8     /*c.erase(k);//從c中刪除關鍵字為 k的函數
 9     c.erase(p);//刪除叠代器p指定的元素,p必須指向一個存在的元素不能位end()
10     c.erase(b,e);*/
11 
12     //insert返回值:對與不包含重復關鍵字的容器,insert函數返回一個pair,第一個元素是執行具有給定管健字的元素叠代器
13      //第二項是返回是否插入成功
14 
15 
16     //map的下標操作
17     word_count["zhang"]=4;//下標運算可能會插入新的元素
18 
19     word_count.at("zhang");//找到關鍵字為k的元素,不存在則拋出異常
20     auto p=set2.find(2);//返回一個叠代器,指向key==2的元素
21     cout<<*p<<endl;
22     p=set2.lower_bound(7);//指向第一個不小於7的元素
23     p=set2.upper_bound(7);//指向第一個不小於7的元素
24     test();

關聯容器