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 的鍵值對的個數並返回。 |