我想根据存储在元素sequ [i] [2]和sequ [i] [3]中的两个值对数组进行排序。
如果sequ [i] [2]具有相似的值,则按sequ [i] [3]值对其进行排序。
vector< vector<int> > sequ;
int m = 1024, n = 32;
sequ.resize(m);
for(int i = 0 ; i < m ; ++i){
sequ[i].resize(n);
}
sort(sequ[0].begin(),sequ[0].end());
不幸的是,我只知道如何对整个阵列进行排序,而不是具体的元素。我该怎么做
答案 0 :(得分:2)
执行此操作的非lambda方法类似于:
bool func(const vector<int> &v1, const vector<int> &v2)
{
if(v1[2] < v2[2]) return true;
if(v1[2] > v2[2]) return false;
return v1[3] < v2[3];
}
...
sort(sequ.begin(),sequ.end(),func);
答案 1 :(得分:1)
如果你有C ++ 11,你应该尝试这些方法。
sort( secu.begin(), secu.end(), [](const vector<int>&v1, const vector<int>&v2) -> bool
{
return v1[2] < v2[2] || (v1[2] == v2[2] && (v1[3] < v2[3]) );
});
我不是C ++ 11 lambda语法的超级专家,但你应该明白这个想法。如果你没有C ++ 11,你可以随时推出自己的比较函子。