我是 golang 新手,正在编写一些图形路由算法。我的图形表示看起来像这样
type Vertex [2]float64
type Edges map[Vertex]BagOfVertices
type BagOfVertices map[*Vertex]bool
我希望能够将特定顶点的边表示为对其他顶点的一组引用。我的记忆力非常有限。为了避免分配大量重复Vertex对象的内存成本,我想使用指向顶点对象的指针。
我有 1,335,262 个节点和 4,895,070 个边以及大约 800MB 的 RAM。
这是我的尝试
func (e *Edges) GetOrCreateVertex(vertex Vertex) *Vertex {
edges := *e
if _, ok := edges[vertex]; ok {
fmt.Println("Found val")
return &vertex
}
edges[vertex] = make(BagOfVertices)
fmt.Println("Create val")
return &vertex
}
func TestEdges(t *testing.T) {
var edges Edges = make(map[Vertex]BagOfVertices)
// Create edge from vertex 0 to vertex 1
v0 := edges.GetOrCreateVertex(Vertex{0, 0})
v1 := edges.GetOrCreateVertex(Vertex{1, 1})
edges[*v0][v1] = true
// Check edge exist from vertex 0 to vertex 1
v0 = edges.GetOrCreateVertex(Vertex{0, 0})
v1 = edges.GetOrCreateVertex(Vertex{1, 1})
if _, ok := edges[*v0][v1]; !ok {
t.Errorf("Edge from %v to %v does not exist", v0, v1)
}
}
显然,返回的指针GetOrCreateVertex指向刚刚创建的值,而不是 的键Edges。如何将GetOrCreateVertex指针返回到地图中的键Edges?
长风秋雁
梦里花落0921
www说
慕慕森
慕妹3242003
相关分类