鉴于
std::vector<std::pair<std::pair<int,int>, std::pair<int,int>> a;
std::sort(a.begin(),a.end());
std::sort
函数如何对这种类型的向量进行排序?对于进一步级联对是否有任何概括?
答案 0 :(得分:2)
std::sort
会使用operator<
。std::pair
: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;
}
因此,您可以根据需要设计条件。