對組pair
在這部分,我們先介紹一下對組pair中關聯容器與順序容器的公用操作,之後再介紹常用的幾個具體的關聯容器。
1、關聯容器
關聯容器是儲存物件集合的類型,支援通過鍵的高效查詢。關聯容器的大部分行為與順序容器相同,二者的本質區別在於關聯容器通過鍵儲存和讀取元素,而順序容器是通過元素在容器中的位置順序儲存和訪問元素。
關聯容器的每個元素包含一個索引值(key)和一個實值(value)。當元素被插入到關聯容器中時,容器內部資料結構便依照其索引值大小,以某種特定規則將這個元素放置於適當位置。關聯容器沒有所謂的頭尾,只有最大元素和最小元素,關聯容器不提供front、push_front、pop_front、back、push_back、以及pop_back操作。
標準的STL關聯容器分為set(集合)和map(映射)兩大類,以及這兩大類的衍生體multiset(多鍵集合)和multimap(多鍵映射表)。這些容器的底層機制均以RB-tree完成(紅/黑樹狀結構)。
2、關聯容器與順序容器的公用操作
1、關聯容器與順序容器共用的建構函式
關聯容器共用大部分順序容器的操作,但不是全部,關聯容器可以使用以下三個建構函式:
C<T> c;
建立一個名為 c 的空容器。C 是容器類型名,如 vector,T 是元素類型,如 int 或 string。適用於所有容器。
C<T> c(c2);
建立容器 c2 的副本 c;c 和 c2 必須具有相同的容器類型,並存放相同類型的元素。適用於所有容器。
C<T> c(b, e);
建立 c,其元素是迭代器 b 和 e 標示的範圍內元素的副本。適用於所有容器。
2、關聯容器與順序容器共用的其他函數
關聯容器不能通過容器的大小來定義,因為這樣的話就無法知道鍵所對應的值是什麼了。
關聯容器支援順序容器的一些關係操作符。
關聯容器支援begin、end、rbegin、rend操作。
關聯容器支援swap和賦值操作,但不提供assign函數。
關聯容器支援clear和erase函數,但關聯容器的erase運算返回的是void類型。
關聯容器支援size()、max_size()、empty()函數作為容器大小的操作,但不支援resize()函數。
3、對組pair類型提供的操作
對組pair包含兩個資料值。具體的使用方法如下:
pair<T1, T2> p1;
建立一個空的pair對象,它的兩個元素分別是T1和T2類型,採用值初始化。
pair<T1, T2> p1(v1, v2);
建立一個pair對象,它的兩個元素分別是T1和T2類型,其中first成員初始化為v1,second成員初始化為v2。
make_pair(v1, v2);
以v1和v2值建立一個新的pair對象,其元素的類型分別是v1和v2的類型。
p1 < p2;
兩個pair對象之間的小於運算,其定義遵循字典次序:如果p1.first<p2.first
或者!(p2.first<p1.first)&&p1.second<p2.second
,返回true。
p1 == p2;
如果兩個pair對象的first成員和second成員依次相等,則這兩個對象相等,該運算使用其元素的==操作符。
p.first、p.second;
返回p中名為first、second的公有資料成員。
4、pair的建立和初始化
在建立pair對象時,必須提供兩個類型名,pair對象的兩個資料成員各自對應一個,這兩個類型名可以不同。如果在建立pair對象時不提供顯示初始化,則調用預設建構函式對其成員進行初始化;也可以在建立對象時使用( )直接顯示初始化式:
- pair<類型1, 類型2> 對象名;
如果使用多個相同的pair對象,也可以使用typedef簡化其聲明:
typedef pair <string, string> Author;Author 對象名(初始值1,初始值2);
對於pair類可以直接存取其資料成員,其成員都是公有的,分別命名為first成員和second成員,使用點操作符即可訪問。
相關文章:
c++ STL標準容器之Iterator使用
c++複習要點總結z之十二——STL string
相關視頻:
C# 教程