Печать вторых элементов неупорядоченной карты, являющейся набором - PullRequest
0 голосов
/ 27 сентября 2018

У меня простой вопрос, если у меня есть std::unordered_map<std::string, std::set<std::string> > h;, как бы я распечатал вторые элементы этого набора h?

Я знаю, что для первых элементов мы можем просто сказать

for (auto it : h) {
    std::cout << "First: " << it.first << " ";
}

Хотя то же самое не относится к it.second.

Error: error C2679: binary '<<': no operator found which takes a right-hand operand of type '_Ty2' (or there is no acceptable conversion)

Ответы [ 2 ]

0 голосов
/ 27 сентября 2018

first является строкой, поэтому вы можете распечатать ее.second - это set строк.Вы не можете просто установить набор, вы должны напечатать строку внутри набора.

т.е. it->second.begin() должен дать вам итератор для первого элемента набора.

0 голосов
/ 27 сентября 2018

Выполните итерации и напечатайте элементы набора.

for (auto& level1 : h) {
    std::cout << "First: " << level1.first << " Second:";
    for (auto& set_element : level1.second) {
        std::cout << set_element << " ";
    }
}

Если вы действительно хотите использовать level1.second, перегрузите << operator </p>

ostream & operator << (ostream &out, const std::set<std::string> &myset) 
{ 
    for (auto& set_element : myset) {
        out << set_element << " ";
    }
    return out; 
} 

и используйте

for (auto& level1 : h) {
    std::cout << "First: " << level1.first << " Second:"<<level1.second;
}
...