在C ++中比较结构

时间:2010-05-24 05:18:56

标签: c++ class comparison

所以在C ++中很多时候你需要制作一个“索引”类。例如:

class GameID{
   public:
      string name;
      int regionid;
      int gameid;
      bool operator<(const GameID& rhs) const;
}

现在,如果我们将GameID表示为pair<string, pair<int, int> >,那么运算符比较就会随之而来。有没有其他方法来获得自动运算符比较,而无需使用std :: pair&lt;&gt; ?

2 个答案:

答案 0 :(得分:6)

使用operator<时会收到std::pair,因为std::pair实现了operator<重载。当您使用std::string作为对中的一种类型时,它会起作用,因为std::string也会重载operator<

如果您希望能够比较自己类类型的对象,则还需要重载operator<

答案 1 :(得分:1)

如果要比较您在此处定义的结构或类中的元素,则需要为“&gt;”定义自己的运算符重载。或“&lt;”取决于你想要比较它们的方式。

例如,您可以这样做:

class GameID{
   public:
      string name;
      int regionid;
      int gameid;


      inline bool operator > (Game_ID first_game, Game_ID second_game)
      {
          return (first_game.gameID() > second_game.gameID());
      }

}

正如Martin在评论中指出的那样,标准函数算法根据运算符&lt;来定义事物。所以,如果你定义运算符&lt;和operator ==其他关系运算符可以通过这些来定义,因此标准库提供了自动执行此操作的额外功能。