Сравнение структур в C ++ - PullRequest
0 голосов
/ 24 мая 2010

Таким образом, в C ++ часто требуется создать класс «index». Например:

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

Теперь, если бы мы представили GameID как pair<string, pair<int, int> >, сравнение операторов просто идет с ним. Есть ли другой способ получить автоматическое сравнение операторов без использования std :: pair <>?

Ответы [ 2 ]

6 голосов
/ 24 мая 2010

Вы получаете operator< при использовании std::pair, потому что std::pair реализует перегрузку operator<. Это работает, когда вы используете std::string как один из типов в паре, потому что std::string также перегружает operator<.

Если вы хотите иметь возможность сравнивать объекты вашего собственного типа класса, вам также необходимо перегрузить operator<.

1 голос
/ 24 мая 2010

Если вы хотите сравнить элементы в структуре или классе, который вы здесь определяете, вам нужно определить собственную перегрузку оператора для ">" или "<" в зависимости от того, как вы хотите их сравнивать. </p>

Например, вы можете сделать что-то вроде этого:

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

}

Как отмечено в комментарии Мартина, стандартные алгоритмы функций определяют вещи в терминах оператора <. Поэтому, если вы определяете operator <и operator ==, другие реляционные операторы могут быть определены через них, и поэтому стандартные библиотеки предоставляют дополнительные функциональные возможности для этого автоматически. </p>

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...