摘要:更加實際的定義應該是一個集合是一個容器,它其中所包含的元素的值是唯一的。對而言,鍵只是指存儲在容器中的某一成員。成員函數構造函數中的元素都是模板類對象。元素按照成員變量從小到大排列,缺省情況下用定義關鍵字的小于關系。
分類: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.sets0; 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.#include02.#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.#include03.#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.mapm0; 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
multimap
特點:
1.multimap中的元素由 <關鍵字,值>組成,每個元素是一個pair對象,關鍵字就是first成員變量,其類型是Key
2.multimap 中允許多個元素的關鍵字相同。
3.元素按照first成員變量從小到大排列,缺省情況下用 less
舉例
01.#include "stdafx.h" 02.#include
輸出:
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規(guī)行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/64117.html
vector 特點: 1.可變長的動態(tài)數組 2.使用時包含頭文件 #include 3.支持隨機訪問迭代器 ? 根據下標隨機訪問某個元素時間為常數 ? 在尾部添加速度很快 ? 在中間插入慢 成員函數 初始化 [cpp] view plaincopy 01.vector(); 初始化成空 02.vector(int n); 初始...
摘要:注意當中的和屬于容器適配器,它們默認使用的基礎容器分別是和。拷貝構造類型容器的復制品方式三使用迭代器拷貝構造某一段內容。若待插入元素的鍵值在當中已經存在,則函數插入失敗,并返回當中鍵值為的元素的迭代器和。返回該迭代器位置元素的值。 ...
摘要:拷貝構造函數示例構造無參構造函數總結容器和容器的構造方式幾乎一致,靈活使用即可賦值操作功能描述給容器進行賦值函數原型重載等號操作符將區(qū)間中的數據拷貝賦值給本身。清空容器的所有數據刪除區(qū)間的數據,返回下一個數據的位置。 ...
閱讀 2573·2021-11-23 09:51
閱讀 2486·2021-09-30 09:48
閱讀 1081·2021-09-10 10:51
閱讀 2222·2021-08-12 13:22
閱讀 3574·2021-08-11 10:24
閱讀 2173·2019-08-30 15:55
閱讀 650·2019-08-30 14:05
閱讀 3215·2019-08-30 13:03