0

私は c++ の初心者で、2D ベクトルではなくベクトルを扱ってきました。私はよくサーフィンをしてきましたが、インターネット上のデータは 2D ベクトルに関連した非常に特殊なものです。入力ファイルを指定してグラフを作成し、クラスカルのアルゴリズムを最小スパニング ツリーに適用する必要があります。

私のアプローチ:

A1, A2, A3.....An would be the first row and col of my 2d Vectors and they will
 contain name. I will read the input file and start matching the names.
 And then at graph[i][j] I will put the weight.

     A1 A2 A3......  

A1   w  w  w ....... 
A2   w  w  w .......
A3   w  w  w .......

. . . . 今、私はこのようなことを試みています:

struct mat{
       string name;
}

int main(){
vector<vector<mat>> matrix;
// In order to insert
vector<mat> tempVec;
tempVec[0].name = "stack";
matrix.push_back(tempVec);
}   

tempVec[0].nameすると、 0 がマトリックスのどの行または列を示すのかわかりません。それが行を示している場合、アクセスされている列をどのように知ることができますか。つまりvector.push_back(tempVec)、マトリックス内のどの位置をデータに割り当てますか。Matrix[i][j] のような個々の要素にアクセスできることはわかっています。しかし、特定の行、列の位置に重みを割り当ててからアクセスするにはどうすればよいですか。

さらに、クラスカルの方法の良い実装になると思いますか.

コードと説明を簡潔にしてください。そして、前もって感謝します。

4

1 に答える 1

0

を使用vector<vector<T>>することは、よく使用されますが、行列を表現する方法としては最適とは言えません。vector<T>サイズ行 x 列の 1 次元を作成する方がよいでしょう。次に、次のようにインデックスを付けることができます (C スタイルの行優先順に従っていると仮定します)。

vector<mat> matrix(rows*cols);
...
element_ij=matrix[i*cols+j];

現在のコードでは、マトリックスに何も挿入しません。

vector<vector<mat>> matrix;
// In order to insert
vector<mat> tempVec;
tempVec[0].name = "stack";
vector.push_back(tempVec);

最後の行はmatrix.push_back(tempVec);.

于 2013-05-08T12:35:21.237 に答える