该程序将配对存储在地图中,计算单词出现的次数。目标是让数据按出现次数排序并以值/字符串形式输出。显然,法线贴图是按字符串键排序的,所以我不得不反转它。
为此,我阅读文字,并在地图中适当地增加它们的值。然后我创建了一个多图并将地图对复制到多图中,但相反。然后我遍历多图,输出对。但是,当我尝试输出这些对时会发生运行时错误,但我不确定为什么。
这是代码:
#include <map>
#include <string>
#include <iostream>
using namespace std;
int main()
{
map<string, int> words;
multimap<int, string> words2;
string s;
while (true) {
cin >> s;
if (s == "0") break;
++words[s];
}
map<string, int>::iterator p;
for (p = words.begin(); p!=words.end(); ++p)
words2.insert(make_pair(p->second, p->first));
multimap<int, string>::iterator p2;
for (p2 = words2.begin(); p2!=words2.end(); ++p2)
cout << p->first << ": " << p->second << '\n';
}
任何帮助表示赞赏。
PS我在不同的地方读到multimap可以在一个键中多次出现一个键(这就是我首先使用它的原因)和/或多个值。关于哪个是真的或者两者是否都是真的,一些澄清会很好。
还有任何类型的地图复制算法吗?为简单起见,我决定只使用 for 循环,编写自定义副本可能相当容易,但我只是想知道(用于将映射复制到其他配对容器并复制到输出。)