按字母顺序打印std :: multimap键和值

时间:2015-06-27 17:59:01

标签: c++ c++11 c++14 multimap

我需要按字母顺序打印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;   
}

这会按字母顺序打印出作者姓名,但不会打印出他们的作品,也不知道如何按字母顺序打印作品。感谢

2 个答案:

答案 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;
}

Demo