【发布时间】:2018-03-26 03:09:59
【问题描述】:
所以我需要帮助来查找名字最多的姓氏。然后我需要打印出名字。我已经让它打印出每个姓氏中的所有名字,但我不知道如何只打印名字最多的那个。
#include <stdio.h>
#include <iostream>
#include <string>
#include <set>
#include <map>
using namespace std;
typedef set <string> fnset;
main()
{
map <string, fnset *> lnames;
map <string, fnset *>::iterator lnit;
fnset *fnames;
fnset::iterator fnit;
string fn, ln;
while (cin >> fn >> ln) {
lnit = lnames.find(ln);
if (lnit == lnames.end()) {
fnames = new fnset;
lnames.insert(make_pair(ln, fnames));
} else {
fnames = lnit->second;
}
fnames->insert(fn);
}
for (lnit = lnames.begin(); lnit != lnames.end(); lnit++) {
fnames = lnit->second;
for (fnit = fnames->begin(); fnit != fnames->end(); fnit++) {
cout << *fnit << endl;
}
}
}
【问题讨论】:
-
好像你把这个弄得太复杂了。为什么映射 pointers 中的值通过 typedef 指向一组字符串?一个简单的
map<string, set<string>>就足够了。最后,您不需要嵌套循环,只需一个循环即可找到映射中的哪个键对应于集合中条目最多的值,然后是第二个循环打印出集合的内容。 -
所以你有一个姓氏和名字的地图(姓氏是关键),你想找到名字最多的姓氏?请注意,有效的 C++ 只定义了一个
main(),它返回一个int