我希望能够通过这样做来访问边缘的权重:
int edgeWeightOfTwoVertexes = weights[vertexA][vertexB];
vertexA
和vertexB
是我vertex
班级的对象。那么我如何初始化2D矢量以使其工作?
我从未见过一个非整数值访问的向量/数组元素,所以我想知道这样的事情是否可行。如果没有,还有哪些其他建议可以存储并快速访问边缘权重?
答案 0 :(得分:1)
您可以将边缘表示为
std::pair<int, int> // first = source, second = destination
然后你的边权重可能是
std::map<std::pair<int, int>, int> weights;
密钥是您的边缘(由起始节点和结束节点指定),值将是成本。所以你可以说
int edgeWeightOfTwoVertexes = weights[{vertexA, vertexB}];
否则,如果你想坚持使用2D矢量,你就有了
std::vector<std::vector<int>> weights;
然后您可以访问
int edgeWeightOfTwoVertexes = weights[vertexA][vertexB];
但请注意,一般来说,这些图表的结果是非常稀疏,这不是对内存的有效利用。
修改强>
如果你的顶点是某个Vertex
类的实例,我会给每个Vertex
一个从0
到顶点数的id,然后你可以使用它们来索引
weights[vertexA.id][vertexB.id]