關聯容器
阿新 • • 發佈:2018-02-10
特定 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 stringv2,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();
關聯容器