multimap 容器

multimap 容器具有和 map 相同的特性,即 multimap 容器也用於存儲 pair<const K, T> 類型的鍵值對(其中 K 表示鍵的類型,T 表示值的類型),其中各個鍵值對的鍵的值不能做修改;並且,該容器也會自行根據鍵的大小對存儲的所有鍵值對做排序操作。和 map 容器的區別在於,multimap 容器中可以同時存儲多(≥2)個鍵相同的鍵值對。

 

創建C++ multimap容器的方法

1) 通過調用 multimap 類模板的默認構造函數,可以創建一個空的 multimap 容器:

std::multimap<std::string, std::string>mymultimap;

2) 當然,在創建 multimap 容器的同時,還可以進行初始化操作。比如:

//創建並初始化 multimap 容器
multimap<string, string>mymultimap{ {"C語言教程", "http://c.biancheng.net/c/"},
                                    {"Python教程", "http://c.biancheng.net/python/"},
                                    {"STL教程", "http://c.biancheng.net/stl/"} };

3) 除此之外,通過調用 multimap 類模板的拷貝(複製)構造函數,也可以初始化新的 multimap 容器。例如:

multimap<string, string>newmultimap(mymultimap);

4) multimap 類模板還支持從已有 multimap 容器中,選定某塊區域內的所有鍵值對,用作初始化新 multimap 容器時使用。例如:

//創建並初始化 multimap 容器
multimap<string, string>mymultimap{ {"C語言教程", "http://c.biancheng.net/c/"},
                                    {"Python教程", "http://c.biancheng.net/python/"},
                                    {"STL教程", "http://c.biancheng.net/stl/"} };
multimap<string, string>newmultimap(++mymultimap.begin(), mymultimap.end());

5) 前面講到,multimap 類模板共可以接收 4 個參數,其中第 3 個參數可用來修改 multimap 容器內部的排序規則。默認情況下,此參數的值爲std::less<T>,這意味着以下 2 種創建 multimap 容器的方式是等價的:

multimap<char, int>mymultimap{ {'a',1},{'b',2} };
multimap<char, int, std::less<char>>mymultimap{ {'a',1},{'b',2} };

 

C++ multimap容器包含的成員方法

成員方法 功能
begin() 返回指向容器中第一個(注意,是已排好序的第一個)鍵值對的雙向迭代器。如果 multimap 容器用 const 限定,則該方法返回的是 const 類型的雙向迭代器。
end() 返回指向容器最後一個元素(注意,是已排好序的最後一個)所在位置後一個位置的雙向迭代器,通常和 begin() 結合使用。如果 multimap 容器用 const 限定,則該方法返回的是 const 類型的雙向迭代器。
rbegin() 返回指向最後一個(注意,是已排好序的最後一個)元素的反向雙向迭代器。如果 multimap 容器用 const 限定,則該方法返回的是 const 類型的反向雙向迭代器。
rend() 返回指向第一個(注意,是已排好序的第一個)元素所在位置前一個位置的反向雙向迭代器。如果 multimap 容器用 const 限定,則該方法返回的是 const 類型的反向雙向迭代器。
cbegin() 和 begin() 功能相同,只不過在其基礎上,增加了 const 屬性,不能用於修改容器內存儲的鍵值對。
cend() 和 end() 功能相同,只不過在其基礎上,增加了 const 屬性,不能用於修改容器內存儲的鍵值對。
crbegin() 和 rbegin() 功能相同,只不過在其基礎上,增加了 const 屬性,不能用於修改容器內存儲的鍵值對。
crend() 和 rend() 功能相同,只不過在其基礎上,增加了 const 屬性,不能用於修改容器內存儲的鍵值對。
find(key) 在 multimap 容器中查找首個鍵爲 key 的鍵值對,如果成功找到,則返回指向該鍵值對的雙向迭代器;反之,則返回和 end() 方法一樣的迭代器。另外,如果 multimap 容器用 const 限定,則該方法返回的是 const 類型的雙向迭代器。
lower_bound(key) 返回一個指向當前 multimap 容器中第一個大於或等於 key 的鍵值對的雙向迭代器。如果 multimap 容器用 const 限定,則該方法返回的是 const 類型的雙向迭代器。
upper_bound(key) 返回一個指向當前 multimap 容器中第一個大於 key 的鍵值對的迭代器。如果 multimap 容器用 const 限定,則該方法返回的是 const 類型的雙向迭代器。
equal_range(key) 該方法返回一個 pair 對象(包含 2 個雙向迭代器),其中 pair.first 和 lower_bound() 方法的返回值等價,pair.second 和 upper_bound() 方法的返回值等價。也就是說,該方法將返回一個範圍,該範圍中包含的鍵爲 key 的鍵值對。
empty()  若容器爲空,則返回 true;否則 false。
size() 返回當前 multimap 容器中存有鍵值對的個數。
max_size() 返回 multimap 容器所能容納鍵值對的最大個數,不同的操作系統,其返回值亦不相同。
insert() 向 multimap 容器中插入鍵值對。
erase() 刪除 multimap 容器指定位置、指定鍵(key)值或者指定區域內的鍵值對。
swap() 交換 2 個 multimap 容器中存儲的鍵值對,這意味着,操作的 2 個鍵值對的類型必須相同。
clear() 清空 multimap 容器中所有的鍵值對,使 multimap 容器的 size() 爲 0。
emplace() 在當前 multimap 容器中的指定位置處構造新鍵值對。其效果和插入鍵值對一樣,但效率更高。
emplace_hint() 在本質上和 emplace() 在 multimap 容器中構造新鍵值對的方式是一樣的,不同之處在於,使用者必須爲該方法提供一個指示鍵值對生成位置的迭代器,並作爲該方法的第一個參數。
count(key) 在當前 multimap 容器中,查找鍵爲 key 的鍵值對的個數並返回。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章