C++關聯容器<map>簡單總結
map提供大小可變的關聯容器,基於關聯鍵值高效檢索元素值。當你處理鍵值對的數據是,都可以考慮使用map關聯容器。
特點:
-
大小可變的關聯容器,基於關聯鍵值高效檢索元素值。
-
可逆,因為它提供雙向迭代器來訪問其元素。
-
有序,因為它的元素根據指定的比較函數按鍵值排序。
-
唯一。 因為它的每個元素必須具有唯一鍵。
-
關聯容器對,因為它的元素數據值與其鍵值不同。
-
模板類,因為它提供的功能是一般性的功能,與元素或鍵類型無關。 用於元素和鍵的數據類型作為類模板以及比較函數和分配器中的參數指定。
頭文件:#include <map>
命名空間:using namespace std:map;
構造函數:
map<key_type, value_type>map_show // key_type表示鍵類型,value_type表示值類型,如:map<string, int>map_show;表示以字符串為鍵,整形位置的關聯map
map<int, int>map_int; // 類似數組
map<string, int>map_str; // 類似以字符串為下標的數組
基本維護操作
1.訪問
下標訪問"[]" 和at()方法兩種方式,推薦第二種方法,它會進行邊界檢查。
對於map<string, int>map_str;其訪問方式為:
map_str["firstel"];或者map_str.at("firstel"); // 返回鍵值firstel對應的值
int size( ) const; // 返回映射中的元素數量。
bool empty( ) const; // 判斷映射是否為空,true表示為空,false表示為非空
iterator find(const Key& key); // 返回映射中具有與指定鍵等效的鍵對應元素位置的迭代器。
注意:count方法:map_str.count("first") // 返回 map 中其鍵與指定了參數的鍵匹配的元素數量。如果 map 包含其排序鍵與參數鍵匹配的元素,則返回 1;如果 map 不包含帶有匹配鍵的元素,則返回 0。
2.添加
對於map<string, int>map_str,有以下幾種插入方式:
map_str.insert(make_pair("key", 23)); // 將鍵值對{"key", 23}插入到映射中
map_str.insert({"key", 23}); // 將鍵值對{"key", 23}插入到映射中
map_str.insert(map_str.begin()+2, make_pair("key", 23)); // 在第二個位置插入{"key", 23}鍵值對
3.刪除
iterator erase(const_iterator Where); // 移除Where迭代器位置的鍵值對
int erase(const key_type& key); // 移除鍵值和key相等的位置的鍵值對
iterator erase( const_iterator First, const_iterator Last ); // 移除First和Last迭代器之間的鍵值對
void clear(); // 清除映射內的所有鍵值對元素
4.遍歷
使用迭代器進行遍歷,非常方便。
iterator begin( ); // 返回指向映射中第一個元素的迭代器
iterator end( ); // 返回指向映射中最后一個元素的迭代器
for (map<string, int>::iterator map_it = map_str.begin(); map_it != map_str.end(); map_it++) { cout << "key: " << map_it->first << "value: " << map_it->second;
// map_it->first表示鍵值對的第一個值,也就是鍵的值,map_it->second表示鍵值對的第二個值,也就是鍵對應的值 }
成員函數
at
|
查找具有指定鍵值的元素。 |
begin | 返回一個迭代器,此迭代器指向映射中的第一個元素。 |
cbegin | 返回一個常量迭代器,此迭代器指向映射中的第一個元素。 |
cend | 返回一個超過末尾常量迭代器。 |
clear | 清除映射的所有元素。 |
count | 返回映射中其鍵與參數中指定的鍵匹配的元素數量。 |
crbegin | 返回一個常量迭代器,此迭代器指向反向映射中的第一個元素。 |
crend | 返回一個常量迭代器,此迭代器指向反向映射中最后一個元素之后的位置。 |
emplace | 將就地構造的元素插入到映射。 |
emplace_hint | 將就地構造的元素插入到映射,附帶位置提示。 |
empty | 如果映射為空,則返回 true。 |
end | 返回超過末尾迭代器。 |
equal_range | 返回一對迭代器。 此迭代器對中的第一個迭代器指向 map 中其鍵大於指定鍵的第一個元素。 此迭代器對中的第二個迭代器指向 map 中其鍵等於或大於指定鍵的第一個元素。 |
erase | 從指定位置移除映射中的元素或元素范圍。 |
find | 返回一個迭代器,此迭代器指向映射中其鍵與指定鍵相等的元素的位置。 |
get_allocator | 返回用於構造映射的 allocator 對象的副本。 |
insert | 將元素或元素范圍插入到映射中的指定位置。 |
key_comp | 返回用於對映射中的鍵進行排序的比較對象副本。 |
lower_bound | 返回一個迭代器,此迭代器指向映射中其鍵值等於或大於指定鍵的鍵值的第一個元素。 |
max_size | 返回映射的最大長度。 |
rbegin | 返回一個迭代器,此迭代器指向反向映射中的第一個元素。 |
rend | 返回一個迭代器,此迭代器指向反向映射中最后一個元素之后的位置。 |
size | 返回映射中的元素數量。 |
swap | 交換兩個映射的元素。 |
upper_bound | 返回一個迭代器,此迭代器指向映射中其鍵值大於指定鍵的鍵值的第一個元素。 |
value_comp | 檢索用於對映射中的元素值進行排序的比較對象副本。 |
shrink_to_fit | 放棄額外容量。 |
size | 返回vector元素個數 |
swap | 交換兩個向量的元素。 |