按升序对矢量的相同元素进行排序

sort same elements of vector in ascending order

本文关键字:元素 排序 升序      更新时间:2023-10-16
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 中具有一个 int。我希望当它找到两个相等的 .second 元素时,按 .first 的升序对它们进行排序。

在这种情况下

仍然可以使用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);
}

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;
}

我确实建议将该方法重命名为更具表现力的方法。

相关文章: