0

要素sequ[i][2]とsequ[i][3]に格納されている2つの値に基づいて配列を並べ替えたいと思います。

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

これを行う非ラムダメソッドは次のようになります。

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ラムダ構文のスーパープロではありませんが、あなたはその考えを理解する必要があります。C ++ 11をお持ちでない場合は、いつでも独自の比較ファンクターを展開できます。

于 2012-12-18T07:50:08.817 に答える