考虑为以下类实现operator<
:
struct foo {
int a, b;
};
可能最常见的方法是元素词典比较,如下所示:
bool operator<(foo lhs, foo rhs) {
return lhs.a < rhs.a || (lhs.a == rhs.a && lhs.b < rhs.b);
}
我已经写了足够多的次数,并且制作了一个类型足够多的次数,我想知道是否有内置的东西可以为我做这件事std::
,希望有更少的样板和合理的代码生成。
现在,两个元素的上述内容还不错,但是随着您添加更多成员,术语会成倍增加。
您可以使用pair<int, int>
而不是struct foo
。
由于pair<type,type>
是内置的std::
因此它具有所有内置数据类型的比较器。因此,您不需要任何额外的运算符重载或自定义比较器。即使它适用于字符串。std::
根据货币对的第一个元素比较两个pair<type, type>
。如果是平局,则根据第二个元素打破领带。
例如-
pair<int,int> a = make_pair(5,10) //declare using make_pair()
pair<int,int> b = {5,7} //different way of declaring pair.
pair<int,int> c = pair<int,int>(7,7) //declare using constructor
现在a < b == false
,b < c == true
和a < c == true
所以通过这种方式,你可以使用pair<type, type>
而不是 struct foo。您可以使用任何数据类型(如float, long long, char, string, pair, vector, set, map, complex
等(替换"类型"。