ブーストを使用せずに C++ で列ごとに 2d ベクトルをソートする最良の方法を教えてください。私はいくつかの検索を行いましたが、良い答えが見つかりません。
ありがとう
これに答えるには、仮定を立てる必要があります。つまり、もっと情報を提供できたはずです。
仮定 1: 「2D ベクトル」と呼ばれるものは、ベクトルのベクトルvector<vector<int>>
です。
仮定 2a: 内側のベクトルは行です。つまり、内側のベクトルの 2 番目の要素などで外側のベクトルを並べ替えます。その場合std::sort
は、3 番目の引数としてコンパレーターを取るオーバーロードが含まれています。あなたがしなければならない唯一のことは、2 つのベクトルを取り、N 番目の要素でそれらを比較するコンパレータ (つまり、関数、関数オブジェクト、ラムダなど) を書くことです。硬すぎてはいけません。
仮定 2b: 内側のベクトルは列です。つまり、内側のベクトルの 1 つを並べ替え、並べ替えを他の行にも適用します。これはもう少し複雑です。たとえば、インデックス 0 から N の別のベクトルを作成し、2 つのインデックスi
を指定してとj
を実際に比較することでそれらを比較するコンパレータで並べ替えることができます。そのベクトルを並べ替えた後、それに応じてすべての列を並べ替えることができます。column[i]
column[j]
STL の sort() 関数がそれを行います。ベクトル内の 2 つのケースを比較する関数を作成するだけです。
http://www.cplusplus.com/reference/algorithm/sort/
その後、必要な並べ替えの種類によって異なります。列を 1 つずつ並べ替えてから、最初の行を並べ替えることができます。