我是c ++的初学者,我一直在处理矢量而不是2D矢量。我已经浏览了很多,但互联网上的数据与2D矢量非常相关。 我需要在给定输入文件的情况下构建图形,然后将Kruskal的算法应用于最小生成树。
我的方法:
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表示Matrix的哪一行或哪一行。如果它表示行,那么我如何知道正在访问哪个col。
我的意思是vector.push_back(tempVec)
,将我的Matrix中的哪个位置分配给数据。我知道我可以访问像Matrix [i] [j]这样的单个元素。但是如何为特定行,列位置分配权重然后访问它。
您认为Kruskal的方法还是一个很好的实现。
请简单说明您的代码和说明。 并提前感谢。
答案 0 :(得分:0)
使用vector<vector<T>>
是表示矩阵的一种相当不理想的方式,即使它经常被使用。制作一维vector<T>
大小的行x列更好。然后,您可以按如下方式对其进行索引(假设您遵循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);
。