0

我想根据存储在元素 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());

不幸的是,我只知道如何对整个数组进行排序,而不是特定元素。我该怎么做呢

4

2 回答 2

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);
于 2012-12-18T07:58:30.380 回答
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,您可以随时推出自己的比较函子。

于 2012-12-18T07:50:08.817 回答