为了账号安全,请及时绑定邮箱和手机立即绑定

对于结构顶点,map [int] vertex和map [int] * vertex有什么区别?

对于结构顶点,map [int] vertex和map [int] * vertex有什么区别?

Go
青春有我 2021-04-10 14:15:42
要定义从int到struct顶点的映射,我应该定义map[int]vertex还是map[int]*vertex?首选哪一个?我扩展了Chickencha的代码:package maintype vertex struct {    x, y int }func main() {    a := make(map[int]vertex)    b := make(map[int]*vertex)    v := &vertex{0, 0}    a[0] = *v    b[0] = v     v.x, v.y = 4, 4    println(a[0].x, a[0].y, b[0].x, b[0].y)    //a[0].x = 3 // cannot assign to (a[0]).x    //a[0].y = 3 // cannot assign to (a[0]).y    b[0].x = 3     b[0].y = 3     println(a[0].x, a[0].y, b[0].x, b[0].y)    u1 := a[0]    u1.x = 2     u1.y = 2     u2 := b[0]    u2.x = 2     u2.y = 2     println(a[0].x, a[0].y, b[0].x, b[0].y)}输出:0 0 4 40 0 3 30 0 2 2从输出中,我的理解是,如果要更改struct成员,则必须使用指向该结构的指针。但是我仍然不确定潜在的原因。特别是为什么我不能分配给a [0] .x?
查看完整描述

2 回答

?
潇潇雨雨

TA贡献1833条经验 获得超4个赞

这个问题的答案可能取决于Go地图的实现方式。对于当前的实现,我将看一下Go map运行时标头hashmap.h和代码hashmap.c文件。它还取决于您如何使用地图,例如针对地图,键和元素数据结构等的活动类型和数量。


要就地更新矢量元素值,请从地图上读取矢量元素值,更新元素值,然后将更新后的元素值写入地图。例如


package main


type vertex struct {

    x, y int

}


func main() {

    a := make(map[int]vertex)

    a[0] = vertex{0, 0}


    println(a[0].x, a[0].y)

    v0 := a[0]

    v0.x = 1

    a[0] = v0

    println(a[0].x, a[0].y)

}

输出:


0 0

1 0


查看完整回答
反对 回复 2021-04-26
  • 2 回答
  • 0 关注
  • 296 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信