繁体   English   中英

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

[英]How sort function works on vector of pair of pairs of integer?

鉴于

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

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

  1. std::sort使用operator<除非另有说明。
  2. 根据std::pair的文档:

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

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

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

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

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

看这个简单的例子。

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

设我们的向量为 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;
}

所以,你可以根据你的要求设计条件。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM