1. 程式人生 > >標準C++中map容器的用法總結

標準C++中map容器的用法總結

一、簡單介紹

map 是一個容器,它用於儲存資料並且能從一個數據集合中取出資料。它的資料組成包含兩項,一個是它的資料值,一個是用於排序的關鍵字。其中關鍵字是惟一的,它用於將資料自動排序。而每個元素的資料值與關鍵字無關,可以直接改變。

需載入的標頭檔案:

#include<map>

using namespace std;

模板原型:

template <class Key,class Type,class Traits = less<Key>,class Allocator=allocator<pair <const Key,Type>>>

(1)Key:儲存在 map 容器中的關鍵字的資料型別

(2)Type:儲存在 map 容器中的資料值的資料型別

(3)Traits:它是一個能提供比較兩個元素的關鍵字來決定它們在map容器中的相對位置。它是可選的,它的預設值是 less<key>

(4)Allocator:它代表儲存管理裝置。它是可選的,它的預設值為allocator<pair <const Key, Type> >

map 容器有以下的特點:

(1)它是一個相關聯的容器,它的大小可以改變,它能根據關鍵字來提高讀取資料能力。

(2)它提供一個雙向的定位器來讀寫取資料。

(3)它已經根據關鍵字和一個比較函式來排好序。

(4)它的每一個元素的關鍵字都是惟一的。

(5)它是一個模板,它能提供一個一般且獨立的資料型別。

二、成員函式

1、begin()

功能:返回第一個元素的定位器(iterator)的地址。

語法:const_iterator begin() const;

            iterator begin();

說明:當返回的第一個元素的地址值為一個常值定位器(_iterator),則 map 不會被修改。當返回的第一個元素的地址值為一個定位器(iterator),則 map 可被修改。

函式返回值:返回一個指向第一個元素的雙向定位器地址。

2、clear()

功能:將一個 map 容器的全部元素刪除。

語法:void clear();
說明:clear 會刪除 map 容器的全部元素。

3、count()

功能:返回對應某個關鍵字的元素的個數。

語法:size_type count(const Key& _Key) const;

說明:_Key 是要進行匹配的關鍵字的值。該函式的返回值的範圍是[low_bound(_Key),upper_bound(_Key)]。因為 map 容器的關鍵字是惟一的,故它只能取 0 或者 1。

函式返回值:當 map 容器包含了關鍵字為_Key 的這個元素時,返回 1,否則返回 0。

4、empty()

功能:測試一個 map 容器是否為空。

語法:bool empty() const;

說明:empty 函式用於測試一個 map 容器是否為空。

函式返回值:當容器 map 為空時,返回 true,否則返回 false。

5、end()

功能:返回最後一個元素後面的定位器(iterator)的地址。

語法:const_iterator end() const;
            iterator end();

說明:end 函式用於測試一個定位器是否已達到它的尾部。

函式返回值:返回一個指向最後一個元素後面的雙向定位器地址。當 map 容器為空時,結果沒定義。

6、equal_range()

功能:返回一對定位器,它們分別指向第一個大於或等於給定的關鍵字的元素和第一個比給定的關鍵字大的元素。

語法:pair <const_iterator, const_iterator> equal_range (const Key& _Key) const;

            pair <iterator, iterator> equal_range (const Key& _Key) const;

說明:_Key 是一個用於排序的關鍵字。

函式返回值:返回一對定位器。要從第一個定位器中取得資料,可用 pr.first。從第二個定位器中取得資料,則用 pr.second。

7、erase()

功能:將一個或一定範圍的元素刪除。

語法:iterator erase(iterator _Where);

            iterator erase(iterator _First,iterator _Last);

            size_type erase(const key_type& _Key);

說明:_Where表示要刪除的元素的位置;_First表示第一個被刪除的元素的位置;_Last表示第一個不被刪除的元素的位置;_Key表示從 map 容器中刪除的元素的關鍵字的值。

因為沒有重新分配空間,故只有對應於被刪除元素的 iterator 和 reference 失效。需要注意的是它不會丟擲任何的 exception。

函式返回值:前兩個函式返回一個指向第一個沒被刪除的元素的雙向定位器,如果不存在這樣的元素,則返回 map 容器的末尾。第三個函式返回被刪除的元素的個數。

8、find()

功能:求出與給定的關鍵字相等的元素的定位器。

語法:iterator find(const Key& _Key);

            const_iterator find(const Key& _Key) const;

說明:_Key 是要進行搜尋的關鍵字的值。該函式會返回一個指向關鍵字為_Key 的元素的定位器。當返回的第一個元素的地址值為一個常值定位器(_iterator),則 map 可通過它

不會被修改。當返回的第一個元素的地址值為一個定位器(iterator),則 map 可通過它被修改。

函式返回值:找到該元素時,返回一個指向關鍵字為_Key 的元素的定位器,否則返回一個指向 map 容器的結束的定位器。

9、get_allocator()

功能:返回一個構造該 map 容器的 allocator 的一個副本。

語法:Allocator get_allocator() const;

說明:容器 map 的 allocator 指明一個類的儲存管理。預設的 allocator 能提供 STL 容器高效的執行。

函式返回值:該容器的 allocator

10、insert()

功能:將一個元素或者一定數量的元素插入到 map 的特定位置中去。

語法:pair <iterator, bool> insert(const value_type& _Val);

            iterator insert(iterator _Where,const value_type& _Val);

            template<class InputIterator> void insert(InputIterator _First,InputIterator _Last);

說明:_Where表示第一個被插入到 map 的元素的位置;_Val表示插入的引數的值;_First表示第一個被插入的位置;_Last表示第一個不被插入的位置。

如果能在_Where 後面迅速地插入,那麼只要很短的時間。

第三個成員函式將範圍為[ _First,_Last ]中的元素插入。

函式返回值:第一個函式返回一對值,當插入成功時,bool=true,當要插入的元素的關鍵字與已有的引數的值相同,則 bool=false,而 iterator 指向插入的位置或者已存在的元素的位置。第二個函式返回指向插入位置的定位器。

程式碼示例如下:

map<string, int> mymap;
string str;
pair<map<string, int>::iterator, bool> inspos;

//insert函式返回一個pair物件,該物件包含一個迭代器和一個bool值
//如果bool為true則說明正確插入,否則說明插入的值含有重複的鍵值,此時不做任何操作
//返回的迭代器都為指定元素
inspos = mymap.insert(map<string, int>::value_type(str, 1));

if (pairIns.second == false)
{
    ((*(pairIns.first)).first).append("OK");
}

//另外一種insert方法,這種方法不作是否有重複鍵值的判斷,直接插入。
mymap.insert(pair<string, int>(str, 1));

11、key_comp()

功能:取得一個比較物件的副本以對 map 容器中的元素進行排序。

語法:key_compare key_comp() const;

說明:儲存物件定義了一個成員函式:bool operator(const Key& _Left,const Key& _Right);當_Left 與_Right 在次序比較中不同時,返回 true,否則返回 false。

函式返回值:取得一個對 map 容器中的元素進行排序的比較物件。

12、lower_bound()

功能:求出指向第一個關鍵字的值是大於等於一個給定值的元素的定位器。

語法:iterator lower_bound(const Key& _Key);
            const_iterator lower_bound(const Key& _Key) const;

說明:_Key 是一個用於排序的關鍵字。當返回值為一個 const _iterator,則 map 容器不會被修改。當返回值為一個 iterato,,則 map 容器可被修改。

函式返回值:返回一個指向第一個關鍵字的值是大於等於一個給定值的元素的定位器,或者返回指向 map 容器的結束的定位器。

13、map()

功能:map 的建構函式。

語法:map();

            explicit map(const Traits& _Comp);

            explicit map(const Traits& _Comp,const Allocator& _Al);

            map(const _map& _Right);

            template<class InputIterator> map(InputIterator _First,InputIterator _Last);

            template<class InputIterator> map(InputIterator _First,InputIterator _Last,const Traits& _Comp);

            template<class InputIterator> map(InputIterator _First,InputIterator _Last,const Traits& _Comp,const Allocator& _Al);

說明:_Al表示一個分配器類;_Comp表示一個用於比較的函式,它的預設值為 hash_compare;_Right表示一個 map 的拷貝;_First表示被拷貝的第一個元素的位置;_Last表示被拷貝的最後一個元素的位置。

所有的建構函式都儲存一個分配器和初始化 map 容器。所有的建構函式都儲存一個 Traits 型別的函式物件,它用於對 map 容器的元素進行排序。頭三個建構函式建立一個空的初始 map 容器。第四個建構函式建立一個_Right 容器的副本。後三個建構函式拷貝在範圍_First~_Last 內的一個 map 容器。

14、max_size()

功能:計算 map 容器的最大長度。

語法:size_type max_size()const;

說明:max_size 會返回 map 容器的最長度。

函式返回值:返回 map 容器可能的最大長度。

15、operator[]

功能:將一個給定的值插入到 map 容器中去。

語法:Type& operator[](const Key& _Key);

說明:_Key 是被插入的元素的關鍵字的值。

注意:當 map 容器中找不到_Key 的值時,則插入到 map 容器中,且值是一個預設值。

函式返回值:返回一個_Key 位置的元素的地址(reference)。

16、operator!=

功能:測試該 map 容器的左邊與右邊是否相同。

語法:bool operator!=(const map <Key,Type,Traits,Allocator>& _Left,const map <Key,Type, Traits, Allocator>& _Right);

說明:_Left 和_Right 是待比較的兩個 map 容器。兩個 map 容器相等,當且僅當它們的元素個數相等且同一個位置上的值相等。

函式返回值:當_Left 和_Right 不同時,返回 True,否則返回 False。

17、operator<

功能:測試該 map 容器的左邊是否小於右邊。

語法:bool operator==(const map <Key, Type, Traits, Allocator>& _Left,const map <Key, Type, Traits, Allocator>& _Right);

說明:_Left 和_Right 是待比較的兩個 map 容器。兩個 map 容器的大小比較是基於第一個不相同的元素的大小比較。

函式返回值:當_Left<_Right 時,返回 True,否則返回 False。

18、operator<=

功能:測試左邊的 map 容器是否小於或等於右邊。

語法:bool operator<(const map <Key, Type, Traits, Allocator>& _Left, const map <Key, Type, Traits, Allocator>& _Right);

說明:_Left 和_Right 是待比較的兩個 map 容器。兩個 map 容器的大小比較是基於第一個不相同的元素的大小比較。

函式返回值:當_Left<=_Right 時,返回 True,否則返回 False。

19、operator==

功能:測試左邊的 map 容器與右邊是否相同。

語法:bool operator==(const map <Key, Type, Traits, Allocator>& _Left,const map <Key, Type, Traits, Allocator>& _Right);

說明:_Left 和_Right 是待比較的兩個 map 容器。兩個 map 容器相等,當且僅當它們的元素個數相等且同一個位置上的值相等。

函式返回值:當_Left 和_Right 相同時,返回 True,否則返回 False。

20、operator>

功能:測試左邊的 map 容器是否大於右邊。

語法:bool operator>(const map <Key, Type, Traits, Allocator>& _Left,const map <Key, Type, Traits, Allocator>& _Right)

說明:_Left 和_Right 是待比較的兩個 map 容器。兩個 map 容器的大小比較是基於第一個不相同的元素的大小比較。

函式返回值:當_Left>_Right 時,返回 True,否則返回 False。

21、operator>=

功能:測試左邊的 map 容器是否大於或等於右邊。

語法:bool operator>=(const map <Key, Type, Traits, Allocator>& _Left,const map <Key, Type, Traits, Allocator>& _Right);

說明:_Left 和_Right 是待比較的兩個 map 容器。兩個 map 容器的大小比較是基於第一個不相同的元素的大小比較。

函式返回值:當_Left>=_Right 時,返回 True,否則返回 False。

22、rbegin()

功能:返回一個指向反向 map 容器的第一個元素的定位器。

語法:const_reverse_iterator rbegin()const;

            reverse_iterator rbegin();

說明:rbegin 與反向 map 容器一起使用,它的作用與 map 容器中的 begin 一樣。當返回值為一個 const _reverse _iterator,則 map 容器不會被修改。當返回值為一個 reverse _iterator,則 map 容器可被修改。

函式返回值:返回一個指向反向 map 容器的第一個元素的反向雙向定位器。

23、rend()

功能:返回一個指向反向 map 容器的最後元素後面的定位器。

語法:const_reverse_iterator rend() const;

            reverse_iterator rend();

說明:rend 與反向 map 容器一起使用,它的作用與 map 容器中的 end 一樣。當返回值為一個 const _reverse _iterator,則 map 不會被修改。當返回值為一個 reverse _iterator,則 map 可被修改。

函式返回值:返回一個指向反向 map 容器中的最後一個元素後面的反向雙向定位器。

24、size()

功能:計算 map 容器的大小。

語法:size_type size() const;

說明:size 函式會計算出 map 容器的長度。

函式返回值:當前 map 容器的長度。

25、swap()

功能:交換兩個 map 容器的元素。

語法:void swap(map& _Right);

說明:_Right 是與目標容器交換元素的 map 容器。

26、upper_bound()

功能:求出指向第一個關鍵字的值是大於一個給定值的元素的定位器。

語法:iterator upper_bound(const Key& _Key);

            const_iterator upper_bound(const Key& _Key) const;

說明:_Key 是一個用於排序的關鍵字。當返回值為一個 const _iterator,則 map 容器不會被修改。當返回值為一個 iterator,則 map 容器可被修改。

函式返回值:返回一個指向第一個關鍵字的值是大於一個給定值的元素的定位器,或者返回指向 map 容器的結束的定位器。

27、value_comp()

功能:返回一個能確定元素的次序的函式。

語法:value_compare value_comp() const;

說明:對於容器 m,當 e1(k1,d1)和 e2(k2,d2)是它的兩個元素,則:m.value_comp(e1,e2)=m..key_com(k1,k2)

函式返回值:返回一個能確定元素的次序的函式。