【发布时间】:2015-06-24 21:16:22
【问题描述】:
我需要设计一个数据结构,它基本上存储键值对,键是整数,值是字符串。
条件1:一个键可能有多个值。
条件2:我需要按降序打印这个map中存储的所有key。
条件3:虽然Keys(整数)以降序打印,但它们对应的值(字符串)必须以字典(升序)顺序打印。
示例输入:
78 Eve
99 Bob
78 Alice
预期输出:
99 Bob
78 Alice
78 Eve
注意键是降序的,而值是升序的。
为此,我用 C++ 编写了以下代码:
#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, Eve) 之前打印 pair(78, Alice)
【问题讨论】:
-
您需要支持按键查找,还是只支持上述操作?此外,您需要以多高的效率执行此操作是否有任何时间限制?
-
@templatetypedef 我们确实需要按键查找..效率越高越好。
标签: c++ sorting stl multimap equal-range