排序函数如何对整数对的向量起作用?

时间:2017-07-08 02:54:01

标签: c++ sorting c++11 vector c++14

鉴于

std::vector<std::pair<std::pair<int,int>, std::pair<int,int>> a;
std::sort(a.begin(),a.end());

std::sort函数如何对这种类型的向量进行排序?对于进一步级联对是否有任何概括?

3 个答案:

答案 0 :(得分:2)

    除非另有说明,否则
  1. std::sort会使用operator<
  2. 根据std::pair
  3. 的文件

    http://en.cppreference.com/w/cpp/utility/pair/operator_cmp

    比较运算符,例如<被定义为词典等价物:

      

    按字典顺序比较lhs和rhs,即比较第一个元素,只有它们是等效的,才比较第二个元素

    在您的情况下,此逻辑将在每个对级别递归应用。

答案 1 :(得分:0)

它将按第一对对的第一个元素排序。换句话说,对的最左边值。

见这个简单的例子。

#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

typedef pair<int, int> Pair;
typedef pair<Pair, Pair> PPair;

ostream& operator<< (ostream& in, pair<int, int> p)
{
    in << '(' << p.first << ", " << p.second << ')';
    return in;
}

int main(void)
{
    vector<PPair> vPP;
    PPair pp1(Pair(123, 2), Pair(8, 7));
    PPair pp2(Pair(33, 22), Pair(88, 77));
    PPair pp3(Pair(333, 222), Pair(888, 777));

    vPP.push_back(pp1);
    vPP.push_back(pp3);
    vPP.push_back(pp2);

    std::sort(vPP.begin(), vPP.end());

    vector<PPair>::const_iterator cit;
    for (cit = vPP.begin(); cit < vPP.end(); cit++) {
        cout << (*cit).first << (*cit).second << endl;
    }

    return 0;
}

答案 2 :(得分:0)

让我们的向量为Q

vector <pair<int,pair<int,int>>> Q;

然后排序

sort(Q.begin(),Q.end(),compare);

根据所需条件比较函数结果为布尔值 即将

中的向量排序

升序

bool compare(pair<int,pair<int,int>> a,pair<int,pair<int,int>> b)
{
    if(a.second.first<=b.second.first)
    return true;
    else
    return false;
}

降序

bool compare(pair<int,pair<int,int>> a,pair<int,pair<int,int>> b)
{
    if(a.second.first>=b.second.first)
    return true;
    else
    return false;
}

因此,您可以根据需要设计条件。