成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

初探STL之關(guān)聯(lián)容器

objc94 / 3434人閱讀

摘要:更加實際的定義應(yīng)該是一個集合是一個容器,它其中所包含的元素的值是唯一的。對而言,鍵只是指存儲在容器中的某一成員。成員函數(shù)構(gòu)造函數(shù)中的元素都是模板類對象。元素按照成員變量從小到大排列,缺省情況下用定義關(guān)鍵字的小于關(guān)系。

分類:set, multiset, map, multimap

特點:內(nèi)部元素有序排列,新元素插入的位置取決于它的值,查找速度快。

常用函數(shù):

find: 查找等于某個值 的元素(x小于y和y小于x同時不成立即為相等)
lower_bound : 查找某個下界
upper_bound : 查找某個上界
equal_range : 同時查找上界和下界
count :計算等于某個值的元素個數(shù)(x小于y和y小于x同時不成立即為相等)
insert: 用以插入一個元素或一個區(qū)間

set

特點:

1.set是數(shù)學(xué)上集合的抽象,是一個不包含重復(fù)元素的集合,并且最多包含一個 null 元素。

2.set可以對序列可以進(jìn)行查找,插入,刪除元素,而完成這些操作的時間同這個序列中元素個數(shù)的對數(shù)成比例關(guān)系,

并且當(dāng)游標(biāo)指向一個已刪除的元素時,刪除操作無效。

3.更加實際的定義應(yīng)該是:一個集合(set)是一個容器,它其中所包含的元素的值是唯一的。這在收集一個數(shù)據(jù)的具體

值的時候是有用的。集合中的元素按一定的順序排列,并被作為集合中的實例。

4.一個集合通過一個鏈表來組織,在插入操作和刪除操作上比向量(vector)快,但查找或添加末尾的元素時會有些

慢,具體實現(xiàn)采用了紅黑樹的平衡二叉樹的數(shù)據(jù)結(jié)構(gòu)。

成員函數(shù)

構(gòu)造函數(shù)

template,

class A = allocator >

class set { … } //默認(rèn)的順序是less

01.set  s0;    
02.  
03.set  > s1;        
04.  
05.set  > s2;  
06.  
07.set  s4( s1 );  
08.  
09.set  s5( s1.begin( ), s1.begin( )+2 ); 

訪問set中的元素

begin()
返回第一個元素?。ú粰z查容器是否為空)

end()
返回最后一個元素(不檢查容器是否為空)

rbegin()
返回指向集合中最后一個元素的反向迭代器

rend()
回指向集合中第一個元素的反向迭代器

find()
返回一個指向被查找到元素的迭代器

equal_range
返回集合中與給定值相等的上下限的兩個迭代器

lower_bound()
返回指向大于(或等于)某值的迭代器

upper_bound()
返回大于某個值元素的迭代器

empty()
如果集合為空,返回true

clear()
清除所有元素

erase()
刪除集合中的元素

insert()
在集合中插入元素

max_size()
返回集合能容納的元素的最大限值

size()
集合中元素的數(shù)目

swap()
交換兩個集合變量

count()
返回某個值元素的個數(shù)

key_comp()
返回一個用于元素間值比較的函數(shù)

value_comp()
返回一個用于比較元素間的值的函數(shù)

插入set中已有的元素時,忽略插入。

舉例:
1.

01.#include   
02.#include   
03.using namespace std;  
04.  
05.int main( )  
06.{  
07.    set s1;  
08.    set::iterator siter1;  
09.  
10.    s1.insert(10);  
11.    s1.insert(20);  
12.    s1.insert(30);  
13.    s1.insert(90);  
14.    s1.insert(31);  
15.  
16.    cout<<"執(zhí)行find(20)后,使用迭代器返回值是 :";  
17.    siter1=s1.find(20);  
18.    cout<<*siter1<<"
";   //20  
19.  
20.    pair::const_iterator,set::const_iterator> p1;  
21.  
22.    p1=s1.equal_range(30);  
23.    cout<<"執(zhí)行equal_range(30),后返回值情況 :"<<"
";  
24.    cout<<"p1.first :";  
25.        cout<<*p1.first<<"
";  //30  
26.    cout<<"p1.second :";  
27.        cout<<*p1.second<<"
"; //31  
28.  
29.    return 0;  
30.} 

2.

01.#include "stdafx.h"  
02.#include   
03.#include   
04.using namespace std;  
05.  
06.int main()   
07.{  
08.    set s1;  
09.    set::iterator siter1;  
10.  
11.    s1.insert(10);  
12.    s1.insert(20);  
13.    s1.insert(30);  
14.    s1.insert(40);  
15.  
16.    cout<<"當(dāng)值是25時  ";  
17.    cout<<"upper_bound(25)的返回值 :";  
18.    siter1=s1.upper_bound(25);  
19.    cout<<*siter1<<"  ";                    //30  
20.    cout<<"lower_bound(25)的返回值 :";  
21.    siter1=s1.lower_bound(25);              //30  
22.    cout<<*siter1<<"  ";  
23.    cout<<"
";  
24.  
25.    cout<<"當(dāng)值是30時  ";  
26.    cout<<"upper_bound(30)的返回值 :";  
27.    siter1=s1.upper_bound(30);              //40  
28.    cout<<*siter1<<"  ";  
29.    cout<<"lower_bound(30)的返回值 :";  
30.    siter1=s1.lower_bound(30);  
31.    cout<<*siter1<<"  ";                    //30  
32.    cout<<"
";  
33.  
34.    getchar();  
35.    return 0;  
36.} 

multiset
特點:
1.set和multiset的區(qū)別是:set插入的元素不能相同,但是multiset可以相同。

2.刪除:如果刪除元素a,那么在定義的比較關(guān)系下和a相等的所有元素都會被刪除

3.count( a ):set能返回0或者1,multiset是有多少個返回多少個。

map
特點:
1.map提供一對一(其中第一個可以稱為關(guān)鍵字,每個關(guān)鍵字只能在map中出現(xiàn)一次,第二個可能稱為該關(guān)鍵字的

值)的數(shù)據(jù)處理能力,由于這個特性,它完成有可能在我們處理一對一數(shù)據(jù)的時候,在編程上提供快速通道。

2.這里說下map內(nèi)部數(shù)據(jù)的組織,map內(nèi)部自建一顆紅黑樹(一種非嚴(yán)格意義上的平衡二叉樹),這顆樹具有對數(shù)據(jù)自

動排序的功能,所以在map內(nèi)部所有的數(shù)據(jù)都是有序的。

3.映射和多重映射基于某一類型Key的鍵集的存在,提供對T類型的數(shù)據(jù)進(jìn)行快速和高效的檢索。

4.對map而言,鍵只是指存儲在容器中的某一成員。

5.map不支持副本鍵,multimap支持副本鍵。map和multimap對象包涵了鍵和各個鍵有關(guān)的值,鍵和值的數(shù)據(jù)類型是不相同的,這與set不同。set中的key和value是Key類型的,而map中的key和value是一個pair結(jié)構(gòu)中的兩個分量。

成員函數(shù)
構(gòu)造函數(shù)

01.template,  
02.class A = allocator >   
03.class map {   
04.    ….  
05.    typedef pair value_type;   
06.    …….  
07.};  

map 中的元素都是pair模板類對象。關(guān)鍵字(first成員變量)各不相同。元素按照關(guān)鍵字從小到大排列,缺省情況下用less,即“<” 定義“小于”。

01.map  m0;  
02.map  > m1;  
03.map  > m2;  
04.map  m4( m1 );  
05.map  m5(m1.begin( ), m1.begin( )+2);  

訪問map中的元素

begin() 返回第一個元素 (不檢查容器是否為空)

end() 返回最后一個元素(不檢查容器是否為空)

rbegin()返回指向映射中最后一個元素的反向迭代器

rend()回指向映射中第一個元素的反向迭代器

clear()清除所有元素

count()返回某個值元素的個數(shù)

empty()如果映射為空,返回true

equal_range返回映射中與給定值相等的上下限的兩個迭代器

erase()刪除映射中的元素

find()返回一個指向被查找到元素的迭代器

inset()在映射中插入元素,不覆蓋原元素。

key_comp()返回一個用于元素間值比較的函數(shù)

lower_bound()返回指向大于(或等于)某值的第一個元素的迭代器

max_size()返回映射能容納的元素的最大限值

size()映射中元素的數(shù)目

swap()交換兩個映射變量

upper_bound()返回大于某個值元素的迭代器

value_comp()返回一個用于比較元素間的值的函數(shù)

[]下標(biāo)

舉例:

01.#include "stdafx.h"  
02.#include   
03.#include   
04.using namespace std;  
05.  
06.  
07.int main()  
08.{  
09.    map map1;  
10.  
11.    map1.insert(map::value_type(1,1.1f));  
12.    map1.insert(pair(2,2.1f));  
13.    map1[3]=3.3f;  
14.  
15.    map::iterator miter;  
16.    miter=map1.begin();  
17.  
18.    cout<<"通過(*miter)訪問,begin()的返回值 :";  
19.    cout<<(*miter).first<<"   "<<(*miter).second;  
20.    cout<<"
";                                    // 1   1.1  
21.  
22.    cout<<"通過miter->訪問,begin()的返回值 :";  
23.    cout<first<<"    "<second;     // 1   1.1  
24.  
25.    getchar();  
26.    return 0;  
27.}  

multimap

特點:

1.multimap中的元素由 <關(guān)鍵字,值>組成,每個元素是一個pair對象,關(guān)鍵字就是first成員變量,其類型是Key

2.multimap 中允許多個元素的關(guān)鍵字相同。

3.元素按照first成員變量從小到大排列,缺省情況下用 less 定義關(guān)鍵字的“小于”關(guān)系。

舉例

01.#include "stdafx.h"  
02.#include   
03.#include   
04.using namespace std;  
05.  
06.int main(  )  
07.{  
08.    map map1;  
09.  
10.    map1.insert(map::value_type(1,1.1f));  
11.    map1.insert(pair(1,2.1f));  
12.    map1.insert(pair(2,2.1f));  
13.    map1[3]=3.3f;  
14.  
15.    cout<<"map1 :"<<"
";  
16.    map::iterator miter;  
17.    for(miter=map1.begin();miter!=map1.end();miter++)  
18.    cout<<(*miter).first<<"   "<<(*miter).second<<"
";  
19.    cout<<"
";   cout<<"
";           
20.  
21.    multimap map2;  
22.    map2.insert(map::value_type(1,1.1f));  
23.    map2.insert(pair(1,2.1f));  
24.    map2.insert(pair(2,2.1f));  
25.  
26.    cout<<"map2 :"<<"
";  
27.    multimap::iterator miter1;  
28.    for(miter1=map2.begin();miter1!=map2.end();miter1++)  
29.    cout<<(*miter1).first<<"   "<<(*miter1).second<<"
";  
30.  
31.    getchar();  
32.    return 0;  
33.}  

輸出:

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/64117.html

相關(guān)文章

  • 初探STL容器Vector

    vector 特點: 1.可變長的動態(tài)數(shù)組 2.使用時包含頭文件 #include 3.支持隨機(jī)訪問迭代器 ? 根據(jù)下標(biāo)隨機(jī)訪問某個元素時間為常數(shù) ? 在尾部添加速度很快 ? 在中間插入慢 成員函數(shù) 初始化 [cpp] view plaincopy 01.vector(); 初始化成空 02.vector(int n); 初始...

    趙春朋 評論0 收藏0
  • 初探STL算法

    摘要:算法部分主要由頭文件組成。數(shù)值算法對容器內(nèi)容進(jìn)行數(shù)值計算。在指定范圍內(nèi)查找由輸入的另外一對標(biāo)志的第二個序列的最后一次出現(xiàn)。重載函數(shù)使用自定義比較操作。刪除指定范圍內(nèi)所有等于指定元素的元素。返回,指出序列中最小的元素。 STL算法部分主要由頭文件,,組成。要使用 STL中的算法函數(shù)必須包含頭文件,對于數(shù)值算法須包含,中則定義了一些模板類,用來聲明函數(shù)對象。 分類 STL中算法大致分為...

    nanfeiyan 評論0 收藏0
  • STL詳解(十)—— set、map、multiset、multimap的介紹及使用

    摘要:注意當(dāng)中的和屬于容器適配器,它們默認(rèn)使用的基礎(chǔ)容器分別是和??截悩?gòu)造類型容器的復(fù)制品方式三使用迭代器拷貝構(gòu)造某一段內(nèi)容。若待插入元素的鍵值在當(dāng)中已經(jīng)存在,則函數(shù)插入失敗,并返回當(dāng)中鍵值為的元素的迭代器和。返回該迭代器位置元素的值。 ...

    不知名網(wǎng)友 評論0 收藏0
  • 熬夜爆肝!C++核心STL容器知識點匯總整理【3W字干貨預(yù)警 建議收藏】

    摘要:拷貝構(gòu)造函數(shù)示例構(gòu)造無參構(gòu)造函數(shù)總結(jié)容器和容器的構(gòu)造方式幾乎一致,靈活使用即可賦值操作功能描述給容器進(jìn)行賦值函數(shù)原型重載等號操作符將區(qū)間中的數(shù)據(jù)拷貝賦值給本身。清空容器的所有數(shù)據(jù)刪除區(qū)間的數(shù)據(jù),返回下一個數(shù)據(jù)的位置。 ...

    wayneli 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<