c++ - STL 的 std::set 容器参数为重载运算符 << ()

标签 c++ set

我有以下代码,在编译时会出错。问题发生在我在重载插入运算符(即)operator << () 函数中创建 const_iterator 的地方。我猜 set 的模板参数版本不正确。任何人都可以参与并使此代码正常工作吗?

#include <iostream>
#include <set>

using namespace std;

class A {
public:
    int _i;
    A(int i) : _i(i) {}
    bool operator < (A a) const { return _i < a._i; }
};

class compA {
public:
    bool operator()(A a1, A a2) const { return (a1._i > a2._i); }
};

template<class T, class C>
std::ostream& operator << (std::ostream& os, const set<T, C>& s) {
    std::set<T, C>::const_iterator itr = s.begin();

    for (int i = 0; i < s.size(); i++) {
        os << *itr++ << " ";
    }

    return os;
}

int main() {
    set<A, less<A> > s1;
    set<A, compA> s2;

    s1.insert(A(9)); s1.insert(A(3)); s1.insert(A(-5)); s1.insert(A(3));
    s2.insert(A(2)); s2.insert(A(1)); s2.insert(A(7));

    cout << s1;
    cout << s2;
}

最佳答案

你忘了声明和实现

std::ostream& operator << (std::ostream& os, const A& s)
{
    return os;
}

此外,比较类中方法的签名应该是:

bool operator()(const A& a1, const A& a2)

关于c++ - STL 的 std::set 容器参数为重载运算符 << (),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10169376/

相关文章:

python - 用于字符串查找的集合与正则表达式,哪个更具可扩展性?

c++ - 根据object的成员变量查找STL::set<object>中的元素

c++ - 带有标准容器的 std::shared_ptr

c++ - for循环的索引问题

c++ - 鸟瞰opencv c++的透视变换

c++ - 将带有大小的私有(private)成员数组初始化为类初始化参数

algorithm - 从列表中查找一组特定的数字

c++ - Crypto++ DES 实现和 key 长度

c++ - 如何使用 VerQueryValue 获取 FileDescription(让示例运行)?

c++ - 如何更新std::set的现有元素?