首页 > 解决方案 > 打印作为集合的无序映射的第二个元素

问题描述

如果我有一个简单的问题,我将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)

标签: c++unordered-map

解决方案


迭代并打印集合元素。

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

推荐阅读