我试图找出如何比较结构中的数据,如下所示:
Node n1(10,10, "tens");
Node n2(20, 20, "twentys");
cout << n1.equal_nodes(n2) << endl;
cout << n1.equal_nodes(n1) << endl;
结构为:
struct Node{
int x;
int y;
string label;
Node()=default;
Node(int i, int j, string l) : x(i), y(j), label(l) {} ;
string to_string () const;
bool equal_nodes(const Node&);
double distance(const Node &)const;
};
我希望我的方法在哪里:
bool Node::equal_nodes(const Node&) {
}
我知道进行比较的最佳方法是比较两个节点的标签,看它们是否相同,但我不明白如何分别区分数据,以便可以比较它们。
答案 0 :(得分:3)
equalNodes()
struct Node
bool equalNodes(const Node& rhs){
return this->x == rhs.x && this->y == rhs.y && this->label == rhs.label;
}
operator==
struct Node
struct Node{
int x;
int y;
string label;
Node()=default;
Node(int i, int j, string l) : x(i), y(j), label(l) {} ;
string to_string () const;
double distance(const Node &)const;
bool operator==(const X& lhs, const X& rhs){ // replace with equalNodes
return lhs.x == rhs.x && lhs.y == rhs.y && lhs.label == rhs.label;
}
};
答案 1 :(得分:2)
bool Node::equal_nodes(const Node& that) {
if (x != that.x) return false;
if (y != that.y) return false;
if (label != that.label) return false;
return true;
}
或者,更好的是,实施operator ==
。
答案 2 :(得分:1)
bool Node::equal_nodes(const Node& n) {
if (this->x == n.x && this->y == n.y && this->label==n.label )
return true;
return false;
}
答案 3 :(得分:1)
您可以使用std::tie:
#include <tuple>
//...
bool Node::equal_nodes(const Node& that)
{ return std::tie(x, y, label) == std::tie(that.x, that.y, that.label); }