我需要按字母顺序打印std::multimap
作者姓名及其作品。
#include <string>
#include <map>
int main()
{
std::multimap<std::string, std::string> authors = {{"Captain", "Nothing"}, {"ChajusSaib", "Foo"},
{"ChajusSaib", "Blah"}, {"Captain", "Everything"}, {"ChajusSaib", "Cat"}};
for (const auto &b : authors)
{
std::cout << "Author:\t" << b.first << "\nBook:\t\t" << b.second << std::endl;
}
return 0;
}
这会按字母顺序打印出作者姓名,但不会打印出他们的作品,也不知道如何按字母顺序打印作品。感谢
答案 0 :(得分:4)
将作品存储在有序的容器中,例如std::map<std::string, std::set<std::string>>
。
如果要求您的程序按字母顺序打印各种其他语言,您还应该考虑所发生情况的影响。像中国人一样你的原始程序和我的解决方案都假设std :: string&#39; s operator<
可以执行你需要的顺序,但这不是非英语语言的保证。
答案 1 :(得分:1)
如前所述,只需使用std::set
作为映射类型:
std::multimap<std::string, std::set<std::string>> authors = {{"Captain", {"Nothing", "Everything"}},
{"ChajusSaib", {"Foo", "Blah", "Cat"}}};
for (auto const &auth : authors) {
std::cout << "Author: " << auth.first << std::endl;
std::cout << "Books:" << std::endl;
for (auto const &book: auth.second)
std::cout << "\t" << book << std::endl;
std::cout << std::endl;
}