БлогNot. С++: делаем простой мультимап в консоли

Помощь дата->рейтинг Поиск Почта RSS канал Статистика nickolay.info Домой

С++: делаем простой мультимап в консоли

Ассоциативные контейнеры нисколько не сложнее последовательных, если хоть разок с ними поработать. Приведённый ниже код - элементарный пример на работу с 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;
}

теги: c++ учебное форматы

комментарии (0)

03.05.2017, 11:31; рейтинг: 1135

  свежие записипоиск по блогукомментироватьстатистика

Наверх Яндекс.Метрика
© PerS
вход