2010-05-24 56 views
0

所以在C++中有很多時候你需要創建一個「索引」類。例如:在C++中比較結構體

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

現在,如果我們是代表遊戲ID爲pair<string, pair<int, int> >,操作者只需比較,用它來。是否有任何其他方式來獲得自動運算符比較而不必使用std :: pair <>?

回答

6

當您使用std::pair時,得到operator<,因爲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()); 
     } 

} 

正如馬丁的評論中指出,標準的功能算法操作<來定義的東西。因此,如果您定義運算符<和運算符==,則可以通過這些運算符定義其他關係運算符,因此標​​準庫提供了可以自動執行的額外功能。

+0

所有的標準函數算法都以運算符<來定義。如果您定義了operator <和operator ==,則所有其他關係運算符都可以通過這兩個定義,因此標準庫提供了額外的功能來自動執行。 – 2010-05-24 07:13:07

+0

@Martin,好點。編輯包含此信息。 – shuttle87 2010-05-24 07:42:01