打印一组无序地图的第二个元素

时间:2018-09-27 20:02:15

标签: c++ unordered-map

我有一个简单的问题,如果我有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 :(得分:3)

迭代并打印设置的元素。

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

如果您确实要使用level1.second,请重载<<运算符

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

答案 1 :(得分:0)

first是一个字符串,因此您可以打印它。 second是一个字符串set。您不仅可以退出该集合,还必须在该集合内打印一个字符串

it->second.begin()应该给您迭代器到集合的第一个元素。