2010-05-24 55 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