我需要一个 std::set<std::pair<int,NodeA>>
。因此,我需要重载 NodeA 的 < 运算符。我已经这样做了,但是它没有起作用。
void matriceLab::aStar(int* matX,const int x, const int y, const int endX,const int endY){
std::set<std::pair<int,NodeA>> nodi;
allocaNodi(nodi,matX,x,y,endX,endY);
}
void matriceLab::allocaNodi(std::set<std::pair<int,NodeA>>& nodi, int* matX,const int x, const int y,const int endX,const int endY){
for(int i = 0; i < x; i++){
for(int j = 0; j < y; j = j + 2){
NodeA nodo(i,j,endX,endY);
std::pair <int,NodeA> pair1(i + j * x, nodo);
nodi.insert(pair1);
}
}
}
class NodeA
{
//...
bool operator<(const NodeA& a){
if(posX < a.posX){
return true;
}else{
return false;
}
}
//...
}
C:\TDM-GCC-32\lib\gcc\mingw32\5.1.0\include\c++\bits\stl_pair.h|222|错误:没有匹配的'operator<'(操作数类型为'const NodeA'和'const NodeA')|
C:\Users\cristina\Desktop\università pdf\Laboratorio di Programmazione\progettic++_SFML_openGL\SFML-2019-4-Grid\NodeA.h|24|注意:候选项:bool NodeA::operator<(const NodeA&) <<近似匹配>>
bool operator<(const NodeA& a) {
翻译为bool operator<(const NodeA& a) const {
的意思是在函数声明中添加const
修饰符,表示该函数不会修改对象的成员变量。 - Algirdas Preidžiusif(condition) return true; else return false;
,可以直接使用return condition;
。 - NathanOliverstd::map
或std::vector
,而非std::set
。但由于没有展示其具体用途,我不能确定。 - walnutoperator<
是否需要修改对象?如果不需要,你的operator<
是否标记为const
? - Eljay