我想在 2 对之间重载运算符 <。当我使用 < 进行比较时它有效,但当我使用 built_in cpp 排序函数时它不起作用。 #包括 使用命名空间标准;
typedef pair<int,int> pii;
bool operator < (const pii &a,const pii &b){
return a.second<b.second;
}
int main()
{
pii a,b;
a=make_pair(1,4);
b=make_pair(2,3);
if(a<b) cout<<"a<b\n";
else cout<<"b<a\n";
vector<pii> v;
v.push_back(a);
v.push_back(b);
sort(v.begin(),v.end());
for(auto x:v)
cerr<<x.first<<" "<<x.second<<endl;
return 0;
}
输出:
b<a
1 4
2 3
我很困惑为什么它不打印:
b<a
2 3
1 4
最佳答案
std::pair
已经有一个内置的 operator<
.如果您想按不同的标准排序,您可以传递一个比较函数。
std::sort(v.begin(),v.end(), [](auto& lhs, auto& rhs){ return lhs.second < rhs.second; });
关于c++ - 我的重载运算符 < 不适用于 cpp 中的排序函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55075790/