2010-05-24 2 views
0

Итак, на C++ Существует много раз, когда вам нужно создать класс «индекс». Например:Сравнение структур в C++

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

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

ответ

6

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

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

1

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

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

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 ==, другие реляционные операторы могут быть определены через них, и поэтому стандартные библиотеки предоставляют дополнительную функциональность для этого автоматически.

+0

Все алгоритмы стандартных функций определяют вещи в терминах оператора <. Если вы определяете оператор <и operator ==, все остальные реляционные операторы могут быть определены с помощью этих двух, и поэтому стандартные libs предоставляют дополнительную функциональность, чтобы сделать это автоматически. –

+0

@ Мартин, хорошая точка. Отредактировано для включения этой информации. – shuttle87

Смежные вопросы