C ++:比较结构中的数据

时间:2017-03-27 00:43:37

标签: c++

我试图找出如何比较结构中的数据,如下所示:

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&) {

}

我知道进行比较的最佳方法是比较两个节点的标签,看它们是否相同,但我不明白如何分别区分数据,以便可以比较它们。

4 个答案:

答案 0 :(得分:3)

equalNodes() struct

中实施Node
bool equalNodes(const Node& rhs){ 
        return this->x == rhs.x && this->y == rhs.y && this->label == rhs.label;
}

或者,更改equalNodes()以在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); }