新聞中心
STL是C++的一個(gè)類(lèi)庫(kù)。STL中的容器有隊(duì)列容器和關(guān)聯(lián)容器,容器適配器(congtainer adapters:stack,queue,priority queue),位集(bit_set),串包(string_package)等等。

10年積累的成都網(wǎng)站建設(shè)、做網(wǎng)站經(jīng)驗(yàn),可以快速應(yīng)對(duì)客戶(hù)對(duì)網(wǎng)站的新想法和需求。提供各種問(wèn)題對(duì)應(yīng)的解決方案。讓選擇我們的客戶(hù)得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認(rèn)識(shí)你,你也不認(rèn)識(shí)我。但先做網(wǎng)站設(shè)計(jì)后付款的網(wǎng)站建設(shè)流程,更有山陽(yáng)免費(fèi)網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。
在系列中,我將介紹list,vector,deque等隊(duì)列容器,和set和multisets,map和multimaps等關(guān)聯(lián)容器,一共7種基本容器類(lèi)。
隊(duì)列容器(順序容器):隊(duì)列容器按照線(xiàn)性排列來(lái)存儲(chǔ)T類(lèi)型值的集合,隊(duì)列的每個(gè)成員都有自己的特有的位置。順序容器有向量類(lèi)型、雙端隊(duì)列類(lèi)型、列表類(lèi)型三種。
下面介紹關(guān)聯(lián)容器類(lèi)。
集和多集(set 和multiset 容器類(lèi)):
一個(gè)集合(#include
在集中,所有的成員都是排列好的。
如果先后往一個(gè)集中插入:12,2,3,123,5,65
則輸出該集時(shí)為:2,3,5,12,65,123
集和多集的區(qū)別是:set支持唯一鍵值,set中的值都是特定的,而且只出現(xiàn)一次;而multiset中可以出現(xiàn)副本鍵,同一值可以出現(xiàn)多次。
Set和multiset的模板參數(shù):
- template
第一個(gè)參數(shù)key是所存儲(chǔ)的鍵的類(lèi)型,第二個(gè)參數(shù)是為排序值而定義的比較函數(shù)的類(lèi)型,第三個(gè)參數(shù)是被實(shí)現(xiàn)的存儲(chǔ)分配符的類(lèi)型。在有些編譯器的具體實(shí)現(xiàn)中,第三個(gè)參數(shù)可以省略。第二個(gè)參數(shù)使用了合適形式的迭代器為鍵定義了特定的關(guān)系操作符,并用來(lái)在容器中遍歷值時(shí)建立順序。集的迭代器是雙向,同時(shí)也是常量的,所以迭代器在使用的時(shí)候不能修改元素的值。
Set定義了三個(gè)構(gòu)造函數(shù):
默認(rèn)構(gòu)造函數(shù):
- explicit set(const Compare&=compare());
如:
- set
> set1;
less
- template
set(InputIterator, InputIterator,\ const Compare&=compare());
如:
- set
>set2(vector1.begin(),vector1.end());
復(fù)制構(gòu)造函數(shù):
- set(const set
);
如:
- set
>set3(set2);
下面我們來(lái)看一個(gè)簡(jiǎn)單的集和多集的插入例程:
- #include
- #include
- using namespace std;
- int main()
- {
- set
set1; - for(int i=0; i<10; ++i)
- set1.insert(i);
- for(set
::iterator p=set1.begin();p!=set1.end();++p) - cout<<*p<<"";
- if(set1.insert(3).second)//把3插入到set1中
- //插入成功則set1.insert(3).second返回1,否則返回0
- //此例中,集中已經(jīng)有3這個(gè)元素了,所以插入將失敗
- cout<<"set insert success";
- else
- cout<<"set insert failed";
- int a[] = {4, 1, 1, 1, 1, 1, 0, 5, 1, 0};
- multiset
A; - A.insert(set1.begin(),set1.end());
- A.insert(a,a+10);
- cout<
- for(multiset
::iterator p=A.begin();p!=A.end();++p) - cout<<*p<<" ";
- return 0;
- }
映射和多重映射(map 和multimap)
映射和多重映射(#include
set中的key和value是Key類(lèi)型的,而map中的key和value是一個(gè)pair結(jié)構(gòu)中的兩個(gè)分量。Map支持下表運(yùn)算符operator[],用訪(fǎng)問(wèn)普通數(shù)組的方式訪(fǎng)問(wèn)map,不過(guò)下標(biāo)為map的鍵。在multimap中一個(gè)鍵可以對(duì)應(yīng)多個(gè)不同的值。
下面的例程說(shuō)明了map中鍵與值的關(guān)系。
- #include
- #include
- using namespace std;
- int main()
- {
- map
> map1; - map
>::iterator mapIter; - //char 是鍵的類(lèi)型,int是值的類(lèi)型
- //下面是初始化,與數(shù)組類(lèi)似
- //也可以用map1.insert(map
>::value_type(''c'',3)); - map1['c']=3;
- map1['d']=4;
- map1['a']=1;
- map1['b']=2;
- for(mapIter=map1.begin();mapIter!=map1.end();++mapIter)
- cout<<" "<<(*mapIter).first<<": "<<(*mapIter).second;
- //first對(duì)應(yīng)定義中的char鍵,second對(duì)應(yīng)定義中的int值
- //檢索對(duì)應(yīng)于d鍵的值是這樣做的:
- map
>::const_iterator ptr; - ptr=map1.find('d');
- cout<<'\n'<<" "<<(*ptr).first<<" 鍵對(duì)應(yīng)于值:"<<(*ptr).second;
- return 0;
- }
從以上例程中,我們可以看到map對(duì)象的行為和一般數(shù)組的行為類(lèi)似。Map允許兩個(gè)或多個(gè)值使用比較操作符。下面我們?cè)倏纯磎ultimap:
- #include
- #include
- #include
- using namespace std;
- int main()
- {
- multimap
>mulmap; - multimap
>::iterator p; - //初始化多重映射mulmap:
- typedef multimap
>::value_type vt; - typedef string s;
- mulmap.insert(vt(s("Tom "),s("is a student")));
- mulmap.insert(vt(s("Tom "),s("is a boy")));
- mulmap.insert(vt(s("Tom "),s("is a bad boy of blue!")));
- mulmap.insert(vt(s("Jerry "),s("is a student")));
- mulmap.insert(vt(s("Jerry "),s("is a beatutiful girl")));
- mulmap.insert(vt(s("DJ "),s("is a student")));
- //輸出初始化以后的多重映射mulmap:
- for(p=mulmap.begin();p!=mulmap.end();++p)
- cout<<(*p).first<<(*p).second<
- //檢索并輸出Jerry鍵所對(duì)應(yīng)的所有的值
- cout<<"find Jerry :"<
- p=mulmap.find(s("Jerry "));
- while((*p).first=="Jerry ")
- {
- cout<<(*p).first<<(*p).second<
- ++p;
- }
- return 0;
- }
在map中是不允許一個(gè)鍵對(duì)應(yīng)多個(gè)值的,在multimap中,不支持operator[],也就是說(shuō)不支持map中允許的下標(biāo)操作。
以上,我們學(xué)習(xí)的是關(guān)聯(lián)容器類(lèi)set和multisets,map和multimaps,希望對(duì)你有幫助。
當(dāng)前題目:STL容器之關(guān)聯(lián)容器
分享鏈接:http://www.dlmjj.cn/article/dhjjgpe.html


咨詢(xún)
建站咨詢(xún)
