2016-09-17 11 views
0

2次元ベクトル(10x100)内の数値をソートする必要があります。C++ 2Dベクトルソート

私の考えは、最初に行でソートし、次に最初の列で最小の番号を見つけて新しい1Dベクトルに保存し、列の中で最小のものを最後の番号まで削除することです。

私のコードはこのようになりますが、動作しません。あなたの質問やロジック例に基づいて

vector <vector <int> > vec(10, vector <int> (0));// already sorted by rows. 
vector <int> datafinal; 

for(int row=0; row < vec.size(); row++){ 
    int mini = vec[0][0]; 
    if (vec[row][0]< mini) { 
     datafinal.push_back(mini); 
     vec[row].erase(vec[row].begin()); 
    } 
} 

for (int k=0; k< datafinal.size(); k++){ 
    cout << datafinal[k] << endl; 
} 
+0

あなたのロジックは根本的に壊れているようです。同じ行が毎回最小の値を持つ可能性があるため、最終的にその行は完全に空になり、残りの行はそのまま残ります。最初の列には「最小のもの」はなくなります。なぜなら、行の1つが空であり、ロジックが未定義の動作になるからです。示されたコードにも明らかなバグがありますが、全体的なロジックがかなり壊れているように見えますが、それは議論の対象です。最初に正しいロジックを見つけ、実装の作業を開始してください。 –

+0

あなたは私にいくつかの論理を教えていただけますか?私は初心者です。 – Juliusameri

+0

残念ながら、あなたは行列をソートするために必要なロジックだけを知っています。私は、あなたのマトリックスが何であるか、それをどのように使用するのか分かりません。あなたはC++の初心者かもしれませんが、これはC++とは関係ありません。ロジックは、C++、Java、Python、Perl、またはその他の言語で***が実装されていた***と同じです。論理的には、まず行列のソート方法を定義する必要があります。それをコードに変換するだけです。 –

答えて

0

、私はこのように感じるあなたが何をしようとしてです:あなたはから読み取ることに任されるように行列全体/ 2Dベクトルを並べ替えることを望む

  • martix/2dベクトルは昇順/降順で読み取られます。

この場合、行列/ 2dベクトル全体を並べ替えのためのN個の要素のセットとして扱うことができますが、データを2d形式で適切に配置/置換する必要があります。

この例は次のようになります。

[3、5、1]
[1、3,1]
[12、4、1]

これは標準として扱うことができます[3,5,1,1,3,1,12,4,1]

標準の配列/ベクトルとして扱うと、通常のソートを実行できます関数を設定します。

次に行列/ 2d形式に変換すると、セットを繰り返し処理できるようになり、行Nのサイズを構成する要素の数を読み取るたびに、新しい行に移動します。

+0

なぜですか?価値の意味は何ですか?どのように使用されていますか?配列全体に対して最小のものか、各行/カラムの最小値に意味がありますか? – Holmz