0 c++ oop constants operator-overloading set
#include <set>\n#include <iostream>\nusing namespace std;\n\ntemplate<class T> \nclass A \n{ \n public:\n A(T a = 0,T b =0): m_a(a),m_b(b) {}\n\n bool operator<(const A& lhs)\n {\n /* compare code */\n }\n \n private:\n T m_a;\n T m_b; \n}; \n\nint main() \n{\n A<int> abc(2,3);\n\n set<A<int>> P2D;\n P2D.insert(abc);\n return 0; \n}\nRun Code Online (Sandbox Code Playgroud)\n当我运行此代码时,出现以下错误
\n\n\n操作数类型为 \xe2\x80\x98const A\xe2\x80\x99 和 \xe2\x80\x98const A\xe2\x80\x99
\n
const如果我在重载上声明关键字operator<:
bool operator<(const A& lhs) const\n{\n /* compare code */\n}\nRun Code Online (Sandbox Code Playgroud)\n它没有给出错误,但是:
\nconst?您operator<需要这样做const,因为在内部set对const对象进行操作。
另外,operator<无论如何你的实施都没有正确。A它忽略比较左侧对象的成员,只查看A右侧对象的成员。
试试这个:
#include <set>
#include <iostream>
using namespace std;
template<class T>
class A
{
public:
A(T a = T(), T b = T()): m_a(a), m_b(b) {}
bool operator<(const A& rhs) const
{
return ((m_a < rhs.m_a) ||
((m_a == rhs.m_a) && (m_b < rhs.m_b))
);
/* alternatively:
return std::tie(m_a, m_b) < std::tie(rhs.m_a, rhs.m_b);
*/
}
private:
T m_a;
T m_b;
};
int main()
{
A<int> abc(2,3);
set<A<int>> P2D;
P2D.insert(abc);
return 0;
}
Run Code Online (Sandbox Code Playgroud)