向量的相同元素按升序排序

时间:2019-01-30 15:54:55

标签: c++

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的升序对其进行排序。

2 个答案:

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

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