如何使用迭代器打印集合集中的内容?

时间:2018-11-18 20:59:51

标签: c++ set powerset

我正在尝试打印powerSet的内容,这是给定集合的集合,但是当我尝试遍历powerSet时,出现C2679错误<<具有以下功能的二进制“ <<”。

template <typename T>
void writePowerSet(const set<set<T>>& pSet) 
{
    for(typename set< set<T> >::const_iterator itr = pSet.begin(); itr != pSet.end(); itr++)
    {
        cout << *itr;
    }
}

我知道,要打印一个集,您必须遍历它并遵循迭代器,但这就是产生我的错误的原因。 有其他方法可以解决吗?

1 个答案:

答案 0 :(得分:2)

pSet是类型std::set<std::set<T>>的引用,因此*itr将是类型std::set<T>的引用。您正在尝试对此类型使用std::ostream的{​​{1}}重载。但是,标准库容器没有定义这种重载。

如果要打印内部集合的所有元素,则还需要对其进行迭代:

<<

在这里,我正在使用基于范围的for循环,因为它更容易读写。输出看起来不会很好,请在需要的地方添加其他输出。

这还假设为内部类型template <typename T> void writePowerSet(const std::set<std::set<T>>& pSet) { for(const auto& s : pSet) { for(const auto& x : s) { std::cout << x; } } } 定义了<<重载。