給定一個(gè)結(jié)構(gòu):type Foo struct {
Bar int
}選項(xiàng)1,地圖的關(guān)鍵:struct valuemap[Foo]bool選項(xiàng)2,地圖的關(guān)鍵:pointer to structmap[*Foo]bool在某些情況下我必須選擇選項(xiàng) 2嗎?IE:內(nèi)存效率?巨大的結(jié)構(gòu)價(jià)值?一般來說,將 map 的鍵設(shè)為 的合理用例有哪些pointer to struct?
1 回答

30秒到達(dá)戰(zhàn)場
TA貢獻(xiàn)1828條經(jīng)驗(yàn) 獲得超6個(gè)贊
對(duì)于這種特定情況,指針不會(huì)真正起作用,因?yàn)槔纾?/p>
func main() {
m1, m2 := map[Vertex]int{}, map[*Vertex]int{}
a, b := Vertex{10}, Vertex{10}
m1[a], m2[&a] = 10, 10
fmt.Println(m1[a], m1[b], m1[a] == m1[b])
fmt.Println(m2[&a], m2[&b], m2[&a] == m2[&b])
fmt.Printf("%p %p", &a, &b)
}
// 編輯問題后編輯
使用指針的唯一原因是結(jié)構(gòu)的內(nèi)容不可比較(又名切片或映射等),或者如果按值使用它太大會(huì)導(dǎo)致性能問題。
恕我直言,您當(dāng)前的情況應(yīng)該使用值而不是指針。
- 1 回答
- 0 關(guān)注
- 163 瀏覽
添加回答
舉報(bào)
0/150
提交
取消