国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

初探STL之關聯容器

objc94 / 3429人閱讀

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

分類:set, multiset, map, multimap

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

常用函數:

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

set

特點:

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

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

并且當游標指向一個已刪除的元素時,刪除操作無效。

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

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

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

慢,具體實現采用了紅黑樹的平衡二叉樹的數據結構。

成員函數

構造函數

template,

class A = allocator >

class set { … } //默認的順序是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()
集合中元素的數目

swap()
交換兩個集合變量

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

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

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

插入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<<"當值是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<<"當值是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,那么在定義的比較關系下和a相等的所有元素都會被刪除

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

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

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

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

動排序的功能,所以在map內部所有的數據都是有序的。

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

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

5.map不支持副本鍵,multimap支持副本鍵。map和multimap對象包涵了鍵和各個鍵有關的值,鍵和值的數據類型是不相同的,這與set不同。set中的key和value是Key類型的,而map中的key和value是一個pair結構中的兩個分量。

成員函數
構造函數

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

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

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

訪問map中的元素

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

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

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

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

clear()清除所有元素

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

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

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

erase()刪除映射中的元素

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

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

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

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

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

size()映射中元素的數目

swap()交換兩個映射變量

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

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

[]下標

舉例:

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中的元素由 <關鍵字,值>組成,每個元素是一個pair對象,關鍵字就是first成員變量,其類型是Key

2.multimap 中允許多個元素的關鍵字相同。

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

舉例

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.}  

輸出:

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

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/64117.html

相關文章

  • 初探STL容器Vector

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

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

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

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

    摘要:注意當中的和屬于容器適配器,它們默認使用的基礎容器分別是和。拷貝構造類型容器的復制品方式三使用迭代器拷貝構造某一段內容。若待插入元素的鍵值在當中已經存在,則函數插入失敗,并返回當中鍵值為的元素的迭代器和。返回該迭代器位置元素的值。 ...

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

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

    wayneli 評論0 收藏0

發(fā)表評論

0條評論

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