1

ブーストを使用せずに C++ で列ごとに 2d ベクトルをソートする最良の方法を教えてください。私はいくつかの検索を行いましたが、良い答えが見つかりません。

ありがとう

4

2 に答える 2

2

これに答えるには、仮定を立てる必要があります。つまり、もっと情報を提供できたはずです。

仮定 1: 「2D ベクトル」と呼ばれるものは、ベクトルのベクトルvector<vector<int>>です。

仮定 2a: 内側のベクトルは行です。つまり、内側のベクトルの 2 番目の要素などで外側のベクトルを並べ替えます。その場合std::sortは、3 番目の引数としてコンパレーターを取るオーバーロードが含まれています。あなたがしなければならない唯一のことは、2 つのベクトルを取り、N 番目の要素でそれらを比較するコンパレータ (つまり、関数、関数オブジェクト、ラムダなど) を書くことです。硬すぎてはいけません。

仮定 2b: 内側のベクトルはです。つまり、内側のベクトルの 1 つを並べ替え、並べ替えを他の行にも適用します。これはもう少し複雑です。たとえば、インデックス 0 から N の別のベクトルを作成し、2 つのインデックスiを指定してとjを実際に比較することでそれらを比較するコンパレータで並べ替えることができます。そのベクトルを並べ替えた後、それに応じてすべての列を並べ替えることができます。column[i]column[j]

于 2013-04-19T13:17:50.930 に答える
1

STL の sort() 関数がそれを行います。ベクトル内の 2 つのケースを比較する関数を作成するだけです。

http://www.cplusplus.com/reference/algorithm/sort/

その後、必要な並べ替えの種類によって異なります。列を 1 つずつ並べ替えてから、最初の行を並べ替えることができます。

于 2013-04-19T13:09:20.110 に答える