[英]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
函数如何对这种类型的向量进行排序? 对的进一步级联是否有任何概括?
std::sort
使用operator<
除非另有说明。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.