所以在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; ?
答案 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 ==其他关系运算符可以通过这些来定义,因此标准库提供了自动执行此操作的额外功能。