81 lines
2.8 KiB
Markdown
81 lines
2.8 KiB
Markdown
|
---
|
|||
|
title: Map
|
|||
|
localeTitle: карта
|
|||
|
---
|
|||
|
## Введение карты
|
|||
|
|
|||
|
`map` - ассоциативный контейнер, который хранит элементы в паре ключ-значение. Так же, как в `Java` есть коллекция, ассоциативный массив в PHP и так далее.
|
|||
|
|
|||
|
## Преимущества использования карты
|
|||
|
|
|||
|
* В нем хранятся только уникальные ключи, и это тоже упорядочено в соответствии с его назначенными критериями сортировки.
|
|||
|
* Поскольку ключи находятся в отсортированном порядке, поэтому поиск элемента на карте через ключ очень быстрый, т.е. он берет логарифмическое время.
|
|||
|
* На `map` будет только одно значение, прикрепленное к каждому ключу.
|
|||
|
* `map` может использоваться как ассоциативные массивы.
|
|||
|
* Он может быть реализован с использованием сбалансированных двоичных деревьев.
|
|||
|
|
|||
|
Вот пример:
|
|||
|
|
|||
|
```c++
|
|||
|
#include <iostream>
|
|||
|
#include <map>
|
|||
|
|
|||
|
using namespace std;
|
|||
|
|
|||
|
int main (){
|
|||
|
map<char,int> first;
|
|||
|
|
|||
|
//initializing
|
|||
|
first['a']=10;
|
|||
|
first['b']=20;
|
|||
|
first['c']=30;
|
|||
|
first['d']=40;
|
|||
|
|
|||
|
map<char, int>::iterator it;
|
|||
|
for(it=first.begin(); it!=first.end(); ++it){
|
|||
|
cout << it->first << " => " << it->second << '\n';
|
|||
|
}
|
|||
|
|
|||
|
return 0;
|
|||
|
}
|
|||
|
```
|
|||
|
|
|||
|
Вывод:
|
|||
|
```
|
|||
|
a => 10
|
|||
|
b => 20
|
|||
|
c => 30
|
|||
|
d => 40
|
|||
|
```
|
|||
|
|
|||
|
## Создание объекта карты
|
|||
|
|
|||
|
`map<string, int> myMap;`
|
|||
|
|
|||
|
## вставка
|
|||
|
|
|||
|
Вставка данных с функцией вставки.
|
|||
|
|
|||
|
```c++
|
|||
|
myMap.insert(make_pair("earth", 1));
|
|||
|
myMap.insert(make_pair("moon", 2));
|
|||
|
```
|
|||
|
|
|||
|
Мы также можем вставлять данные в std :: map, используя оператор \[\], т.е.
|
|||
|
|
|||
|
`myMap["sun"] = 3;`
|
|||
|
|
|||
|
## Доступ к элементам карты
|
|||
|
|
|||
|
Чтобы получить доступ к элементам карты, вам необходимо создать для нее итератор. Вот пример, как было сказано ранее.
|
|||
|
|
|||
|
```c++
|
|||
|
map<char, int>::iterator it;
|
|||
|
for(it=first.begin(); it!=first.end(); ++it){
|
|||
|
cout << it->first << " => " << it->second << '\n';
|
|||
|
}
|
|||
|
```
|
|||
|
|
|||
|
Здесь вы можете узнать больше о карте: [cpluspluc\_map](http://www.cplusplus.com/reference/map/map/map/)
|
|||
|
|
|||
|
NB: весь код в примере приведен в версии C ++ 11. Вы можете узнать больше о версии C ++ [здесь](http://en.cppreference.com/w/cpp/compiler_support)
|