打印无序映射的第二个元素,即集合



如果我有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)

迭代并打印设置的元素。

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

是一个字符串,所以你可以打印它。second是字符串的set。你不能只在集合中打印一个字符串,你必须在集合打印一个字符串。

it->second.begin()应该为您提供集合中第一个元素的迭代器。

最新更新