假設(shè)我想更新地圖中的某個(gè)現(xiàn)有值,或者如果找不到鍵,則執(zhí)行其他操作。我該如何做到這一點(diǎn),而不執(zhí)行 2 次查找?以下 C++ 代碼的 golang 等價(jià)物是什么:auto it = m.find(key);if (it != m.end()) { // update the value, without performing a second lookup it->second = calc_new_value(it->second);} else { // do something else m.insert(make_pair(key, 42));}
2 回答

蕪湖不蕪
TA貢獻(xiàn)1796條經(jīng)驗(yàn) 獲得超7個(gè)贊
Go 不像 C++ 那樣暴露映射的內(nèi)部(鍵,值)對數(shù)據(jù)結(jié)構(gòu),所以你不能完全復(fù)制它。
一種可能的解決方法是創(chuàng)建地圖指針的值,這樣您就可以在地圖中保留相同的值,但更新它們指向的內(nèi)容。例如,如果m是 a map[int]*int,則可以使用以下方法更改值:
v := m[10]
*v = 42
話雖如此,如果額外的內(nèi)存管理開銷會消耗減少哈希查找次數(shù)所帶來的節(jié)省,我不會感到驚訝。因此,值得對您選擇的任何解決方案進(jìn)行基準(zhǔn)測試。

交互式愛情
TA貢獻(xiàn)1712條經(jīng)驗(yàn) 獲得超3個(gè)贊
你不能。情況實(shí)際上與 Python dicts 相同。不過應(yīng)該沒有關(guān)系。Go map 的查找和賦值都是 O(1) 分?jǐn)偟?。結(jié)合這兩個(gè)操作具有相同的時(shí)間復(fù)雜度。
- 2 回答
- 0 關(guān)注
- 178 瀏覽
添加回答
舉報(bào)
0/150
提交
取消