bool third_parameter(const pair<long long,long long> &a,
const pair<long long,long long> &b)
{
return a.second>b.second;
}
int main (){
sort(vec.begin(), vec.end(), third_parameter );
return 0;
}
我在这里使用了这种排序技术,但是对于向量的相同元素,这并不能保证任何事情。我正在使用成对的向量,该向量在.first中的数字i递增,在.second中的整数。我想在找到两个相等的.second元素时按.first的升序对其进行排序。
答案 0 :(得分:4)
std::tie
仍然可以使用,只要注意正确地对变量进行排序即可。
bool custom_compare(const pair<long long, long long> &a,
const pair<long long, long long> &b)
{
return std::tie(b.second, a.first) < std::tie(a.second, b.first);
}
std::sort(vec.begin(), vec.end(), custom_compare);
我们使用积分的另一种选择是“ x的降序”是“ -x的升序”:
如此
bool custom_compare(const pair<long long, long long> &a,
const pair<long long, long long> &b)
{
return std::make_tuple(-a.second, a.first) < std::make_tuple(-b.second, b.first);
}
答案 1 :(得分:1)
std::sort
要求您定义小于运算符。
在代码中放入2个元素如何表现的技巧。
bool third_parameter(const pair<long long,long long> &a,
const pair<long long,long long> &b)
{
if (a.second != b.second)
return a.second > b.second;
// When second is equal, sort based on first, largest values first
return a.first < b.first;
}
int main (){
sort(vec.begin(), vec.end(), third_parameter );
return 0;
}
我确实建议将该方法重命名为更具表现力的内容。