首页 新闻 会员 周边 捐助

c++ map.emplace() 和 map[] 的区别

0
悬赏园豆:20 [已关闭问题] 关闭于 2024-09-28 19:20
#include <vector>
#include <iostream>
#include <algorithm>
#include <string>
#include <unordered_map>
#include <unordered_set>

using namespace std;

// 双向链表
struct ListNode {
    int times;
    unordered_set<string> bucket;
    ListNode *prev;
    ListNode *next;

    ListNode() {
        prev = nullptr;
        next = nullptr;
    }

    ListNode(int times, string key) : ListNode() {
        this->times = times;
        bucket.emplace(key);
    }
};

int main() {
    unordered_map<string, ListNode *> map;
    ListNode *node = new ListNode();
    map.emplace("haha", node);
//    map["haha"] = node;
    ListNode *node2 = new ListNode(1, "x");
    map.emplace("haha", node2);
//    map["haha"] = node2;
}
  • 我发现 emplace 之后,key 对应的值没有变,换成 operator[] 就正常了
  • 调试过程:
n1ce2cv的主页 n1ce2cv | 菜鸟二级 | 园豆:362
提问于:2024-09-28 18:48
< >
分享
所有回答(3)
0

我知道了,如果 key 已经存在了,再用 emplace() 是改不了值的

n1ce2cv | 园豆:362 (菜鸟二级) | 2024-09-28 19:19
0
一位C++初学者 | 园豆:506 (小虾三级) | 2024-10-08 14:13

不错的网站

支持(0) 反对(0) n1ce2cv | 园豆:362 (菜鸟二级) | 2024-10-08 22:48
0

emplace 是插入新 key,已经有了这个 key,就不会再插入了。而用 [] 是返回这个 key 的引用,一般来说如果没有这个 key,就会自动插入。有了就返回它的引用。

hoodlum1980 | 园豆:573 (小虾三级) | 2024-10-16 15:03
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册