我有一个struct
,并希望实现其set
指针。所以我尝试重载operator <
来实现它。这里的一个限制是我无权访问结构定义中的重写代码。我怎么能在结构之外做呢?
这是我到目前为止所做的:
#include<iostream>
#include<set>
#include<vector>
using namespace std;
struct mystruct {
int label;
vector<mystruct *> neighbors;
};
bool operator < (mystruct * n1, mystruct* n2) {
return n1 -> label < n2 -> label;
};
int main() {
set<mystruct *> s;
return 0;
}
错误消息是
错误:超载&#39;运营商&lt;&#39;必须至少有一个参数 类或枚举类型
答案 0 :(得分:3)
的问题
bool operator < (mystruct * n1, mystruct* n2) {
return n1 -> label < n2 -> label;
};
n1
和n2
都是指针。即使它们是指向mystruct
的指针,它们仍然只是指针,并且你不能为指针重载操作符,因为它们是内置的。修复它的最简单方法是使用引用来处理类似
bool operator < (const mystruct& n1, const mystruct7 n2) {
return n.label < n2.label;
};
int main() {
set<mystruct> s;
return 0;
}
如果你不能这样做,那么你需要为std::set
提供一个比较仿函数,并让它使用该函数而不是operator <
。那看起来像是
struct mystruct_pointer_comp
{
bool operator ()(mystruct * n1, mystruct* n2) {
return n1->label < n2->label;
};
}
int main() {
set<mystruct *, mystruct_pointer_comp> s;
return 0;
}