gpt4 book ai didi

c++ - 在结构之外重载运算符

转载 作者:行者123 更新时间:2023-11-27 23:53:48 25 4
gpt4 key购买 nike

我有一个 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;
}

错误信息是

error: overloaded 'operator<' must have at least one parameter of class or enumeration type

最佳答案

问题

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;
}

关于c++ - 在结构之外重载运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44185241/

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