С++: делаем простой мультимап в консоли
Ассоциативные контейнеры
нисколько не сложнее последовательных, если хоть разок с ними поработать. Приведённый ниже код - элементарный пример на работу с multimap
- массивом, состоящим из парных элементов "ключ-значение", в котором "ключ" и "значение" могут быть данными любых типов, а одному ключу может соответствовать несколько значений.
Например, при программировании простейшей телефонной книги ключом может быть строковое имя абонента, а значениями - целочисленные номера его телефонов (предположим, что стандартного целочисленного типа int
"хватит" для записи номера, на самом деле это может быть не так).
Код показывает, как записать/удалить данные, напечатать multimap
в консоль и перебрать с помощью "двойного" итератора ii
все значения, соответствующие нужному ключу.
#include <iostream> #include <string> #include <map> using namespace std; void out (multimap <string, int> map) { //Вывод multimap в консоль cout << endl << "Size = " << map.size(); multimap <string, int>::iterator it = map.begin(); while(it != map.end()) { cout << endl << "Key = " << it->first << ", Value = " << it->second; it++; } } int main() { multimap <string, int> phoneNums; //Ключ - строка, значения - целые phoneNums.insert (pair<string, int>("Bill",1234)); phoneNums.insert (pair<string, int>("Donald",5678)); phoneNums.insert (pair<string, int>("Bill",5678)); cout << endl << "Print all notes:"; out (phoneNums); cout << endl << "Number of notes for Bill = " << phoneNums.count("Bill"); pair <multimap <string,int>::iterator, multimap <string,int>::iterator> ii; ii = phoneNums.equal_range("Bill"); //Нижняя и верхняя граница элементов с ключом Bill cout << endl << "List of notes for Bill:"; multimap<string, int>::iterator it; for (it = ii.first; it != ii.second; ++it) { cout << endl << "Key = " << it->first << ", Value = " << it->second; } phoneNums.erase(ii.first, ii.second); cout << endl << "After erasing of Bill:"; out (phoneNums); system("pause>nul"); return 0; }
03.05.2017, 11:31 [4207 просмотров]