mapIntToString [1000000] = "One Million";
Вы можете также создать экземпляр мультикарты как копию карты:
std::multimap mmapIntToString(mapIntToString.cbegin(), mapIntToString.cend());
В листинге 20.2 приведены различные методы создания экземпляра.
ЛИСТИНГ 20.2. Вставка элементов в карту и мультикарту с использованием перегруженного метода insert В и семантики массива с применением оператора operator []_____________
#include
#include
#include
3:
using namespace std;
// определение типа карты и мультикарты для удобочитаемости
typedef map MAP_INT_STRING;
typedef multimap MMAP_INT_STRING;
9:
template
void DisplayContents (const T& Input)
12: {
for(auto iElement = Input.cbegin() // auto and cbegin(): C++11
; iElement != Input.cend() // cend(): C++11
; ++ iElement )
16: cout << iElement->first « " -> " « iElement->second
endl;
17:
cout « endl;
}
2 0 :
int main ()
22: {
MAP_INT_STRING mapIntToString;
// Вставка пары "ключ-значение" в карту с использованием
ключевого слова value_type
466 ЗАНЯТИЕ 20. Классы карт библиотеки STL
mapIntToString.insert (MAP_INT_STRING::value_type (3, "Three"));
// Вставка пары с использованием функции makejpair()
mapIntToString.insert (make_pair (-1, "Minus One"));
// Вставка объекта пары непосредственно
mapIntToString.insert (pair (1000, "One Thousand"));
// Вставка пары "ключ-значение" с использованием синтаксиса
массива
mapIntToString [1000000] = "One Million";
36:
cout « "The map contains " « mapIntToString.size ();
cout « " key-value pairs. They are: " « endl;
DisplayContents(mapIntToString);
40:
// Создание экземпляра мультикарты, являющейся копией карты
MMAP_INT_STRING mmapIntToString(mapIntToString.cbegin(),
4 3:
|
mapIntToString.cend());
|
44:
|
|
// Функция insert() работает так же, как у мультикарты
// Мультикарта может хранить дубликаты. Вставкадубликата
mmapIntToString.insert(make_pair (1000, "Thousand"));
49: cout « endl « "The multimap contains "
mmapIntToString.size ();
cout « " key-value pairs. They are: " « endl;
cout « "The elements in the multimap are: " « endl;
DisplayContents(mmapIntToString);
53:
// Мультикарта способна возвратить количество пар с тем же ключом
cout « \
"The number of pairs in the multimap with 1000 as their key:"
« mmapIntToString.count (1000)« endl;
return 0;
}
Результат
The map contains 4 key-value pairs. They are:
-1 -> Minus One
3 -> Three
1000 -> One Thousand
1000000 -> One Million
The multimap contains 5 key-value pairs. They are:
The elements in the multimap are:
-1 -> Minus One
3 -> Three
1000 -> One Thousand
1000 -> Thousand
1000000 -> One Million
The number of pairs in the multimap with 1000 as their key: 2
Простые операции с классами std::map и std::multimap библиотеки STL
|
467
|
Анализ
Обратите внимание на определение типа для создания экземпляров шаблонов т а р и m u ltim a p в строках 7 и 8. В результате код будет выглядеть немного проще (и сокра тит синтаксис шаблона). Строки 10-19 содержат версию функции D is p la y C o n te n ts (), адаптированную для карты и мультикарты, в которой для доступа используется итератор f i r s t , указывающий на ключ, и se co n d , указывающий на значение. Строки 26 -32 содер жат различные способы вставки пар “клю ч-значение” в карту с использованием перегру женной версии Метода i n s e r t (). Строка 35 демонстрирует возможность использования семантики массива при помощи оператора o p e r a t o r [ ] для вставки элементов в карту. Обратите внимание на то, что эти механизмы вставки работают также для мультикарты, которая представлена в строке 47, где в нее вставляется дубликат. Интересно, что мульти карта инициализируется как копия карты (строки 42 и 43). Вывод показывает, что эти два контейнера автоматически сортируют вставляемые пары “клю ч-значение” в порядке воз растания ключей. Вывод также демонстрирует, что мультикарта способна хранить пары с одинаковым ключом (в данном случае 1000). Строка 56 демонстрирует применение мето да m u ltim a p : : c o u n t (), сообщающего количество элементов в контейнере с указанным ключом.
Do'stlaringiz bilan baham: |