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

Go 中的地图 - 如何避免双键查找?

Go 中的地图 - 如何避免双键查找?

Go
慕斯王 2021-09-10 21:44:21
假设我想更新地图中的某个现有值,或者如果找不到键,则执行其他操作。我该如何做到这一点,而不执行 2 次查找?以下 C++ 代码的 golang 等价物是什么: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贡献1796条经验 获得超7个赞

Go 不像 C++ 那样暴露映射的内部(键,值)对数据结构,所以你不能完全复制它。


一种可能的解决方法是创建地图指针的值,这样您就可以在地图中保留相同的值,但更新它们指向的内容。例如,如果m是 a map[int]*int,则可以使用以下方法更改值:


v := m[10]

*v = 42

话虽如此,如果额外的内存管理开销会消耗减少哈希查找次数所带来的节省,我不会感到惊讶。因此,值得对您选择的任何解决方案进行基准测试。


查看完整回答
反对 回复 2021-09-10
?
交互式爱情

TA贡献1712条经验 获得超3个赞

你不能。情况实际上与 Python dicts 相同。不过应该没有关系。Go map 的查找和赋值都是 O(1) 分摊的。结合这两个操作具有相同的时间复杂度。


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

添加回答

举报

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