map是 C ++ STL(標(biāo)準(zhǔn)模板庫)的一部分。map是存儲排序的鍵值對的關(guān)聯(lián)容器,其中每個鍵都是唯一的,可以插入或刪除,但不能更改。但是與鍵關(guān)聯(lián)的值可以更改。
例如:一個員工map容器,其中員工ID是鍵,姓名是值,則可以表示為:
| 鍵 | 值 |
|---|---|
| 101 | Nikita |
| 102 | Robin |
| 103 | Deep |
| 104 | John |
template < class Key, //map::key_type class T, //map::mapped_type class Compare = less, //map::key_compare class Alloc = allocator<pair> //map::allocator_type > class map;
key:要存儲在map中的鍵的數(shù)據(jù)類型。
type:要存儲在map中的值的數(shù)據(jù)類型。
compare:一個比較類,它接受兩個bool類型相同的參數(shù),并返回一個值。此參數(shù)是可選的,二進制謂詞less <“ key”>是默認值。
alloc:分配器對象的類型。此參數(shù)是可選的,默認值為分配器
使用以下語句可以輕松創(chuàng)建map:
typedef pair<const Key, T> value_type;
上面的語句將用于創(chuàng)建一個鍵類型為Key類型,且value值類型為 value_type的map。重要的一點是,map的鍵和相應(yīng)的值始終成對插入,您不能在map中僅插入鍵或僅插入值。
#include <string.h>
#include <iostream>
#include <map>
#include <utility>
using namespace std;
int main()
{
mapEmployees;
// 1) 使用數(shù)組索引符號進行賦值
Employees[101] = "Nikita";
Employees[105] = "John";
Employees[103] = "Dolly";
Employees[104] = "Deep";
Employees[102] = "Aman";
cout << "Employees[104]=" << Employees[104] << endl << endl;
cout << "Map 大小: " << Employees.size() << endl;
cout << endl << "自然順序:" << endl;
for( map::iterator ii=Employees.begin(); ii!=Employees.end(); ++ii)
{
cout << (*ii).first << ": " << (*ii).second << endl;
}
cout << endl << "相反順序:" << endl;
for( map::reverse_iterator ii=Employees.rbegin(); ii!=Employees.rend(); ++ii)
{
cout << (*ii).first << ": " << (*ii).second << endl;
}
}輸出:
Employees[104]=Deep Map 大小: 5 自然順序: 101: Nikita 102: Aman 103: Dolly 104: Deep 105: John 相反順序: 105: John 104: Deep 103: Dolly 102: Aman 101: Nikita
以下是map的所有成員函數(shù)的列表:
| 函數(shù) | 描述 |
|---|---|
| constructors | 構(gòu)造map |
| destructors | map析構(gòu)函數(shù) |
| operator= | 將map元素復(fù)制到另一個map容器。 |
| 函數(shù) | 描述 |
|---|---|
| begin | 返回指向map中第一個元素的迭代器。 |
| cbegin | 返回指向map中第一個元素的const迭代器。 |
| end | 返回指向末尾的迭代器。 |
| cend | 返回指向末尾的常量迭代器。 |
| rbegin | 返回指向末尾的反向迭代器。 |
| rend | 返回指向起點的反向迭代器。 |
| crbegin | 返回指向末尾的常量反向迭代器。 |
| crend | 返回指向起點的常量反向迭代器。 |
| 函數(shù) | 描述 |
|---|---|
| empty | 如果map為空,則返回true。 |
| size | 返回map中的元素數(shù)。 |
| max_size | 返回map的最大容量。 |
| 函數(shù) | 描述 |
|---|---|
| operator[] | 用給定的鍵檢索元素。 |
| at | 用給定的鍵檢索元素。 |
| 函數(shù) | 描述 |
|---|---|
| insert | 在map中插入元素。 |
| erase | 從map上擦除元素。 |
| swap | 交換map內(nèi)容。 |
| clear | 刪除map的所有元素。 |
| emplace | 構(gòu)造新元素并將其插入map。 |
| emplace_hint | 通過提示構(gòu)造新元素并將其插入map。 |
| 函數(shù) | 描述 |
|---|---|
| key_comp | 返回鍵比較對象的副本。 |
| value_comp | 返回值比較對象的副本。 |
| 函數(shù) | 描述 |
|---|---|
| find | 搜索具有給定鍵的元素。 |
| count | 獲取與給定鍵匹配的元素數(shù)。 |
| lower_bound | 返回迭代器的下限。 |
| upper_bound | 返回一個迭代器到上限。 |
| equal_range | 返回與給定鍵匹配的元素范圍。 |
| 函數(shù) | 描述 |
|---|---|
| get_allocator | 返回用于構(gòu)造map的分配器對象。 |
| 函數(shù) | 描述 |
|---|---|
| operator== | 檢查兩個map是否相等。 |
| operator!= | 檢查兩個map是否相等。 |
| operator< | 檢查第一個map是否小于其他map。 |
| operator<= | 檢查第一個map是否小于或等于其他map。 |
| operator> | 檢查第一個map是否大于其他map。 |
| operator>= | 檢查第一個map是否大于其他map。 |
| swap() | 交換兩個map的元素。 |