Мне нужно разработать структуру данных, которая в основном хранит пары ключ-значение, где ключ является целым числом, а его значение — строкой.
Условие 1: с ключом может быть связано несколько значений.
Условие 2: мне нужно распечатать все ключи, хранящиеся на этой карте, в порядке убывания.
Условие 3: хотя ключи (целые числа) печатаются в порядке убывания, соответствующие им значения (строки) должны быть напечатаны в лексикографическом (отсортированном по возрастанию) порядке.
Пример ввода:
78 Eve
99 Bob
78 Alice
Ожидаемый результат:
99 Bob
78 Alice
78 Eve
Обратите внимание, что ключи расположены в порядке убывания, а значения — в порядке возрастания.
Для этого я придумал следующий код на С++:
#include <iostream>
#include <map>
using namespace std;
int main()
{
int N;
string name;
int marks;
multimap<int, string, greater<int>> studMap;
multimap<int, string, greater<int>>::iterator itBeg, itEnd;
typedef multimap<int, string, greater<int>>::iterator mapIter;
cin >> N; // total no. of key-value pairs input by user
while (N--)
{
cin >> name >> marks; // pairs of value-key input by user - N times
studMap.insert(pair<int, string>(marks, name));
}
for (itBeg = studMap.begin(); itBeg != studMap.end(); itBeg = itEnd)
{
marks = itBeg->first;
pair<mapIter, mapIter> keyRange = studMap.equal_range(marks);
for (itEnd = keyRange.first; itEnd != keyRange.second; ++itEnd)
{
cout << marks << " " << itEnd->second << endl;
}
}
return 0;
}
Но я получаю вывод, как показано ниже:
99 Bob
78 Eve
78 Alice
тогда как мне нужно, чтобы пара (78, Алиса) была напечатана до (78, Ева)