gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 08:06:38 25 4
gpt4 key购买 nike

我有以下代码,在编译时会出错。问题发生在我在重载插入运算符(即)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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com