【问题标题】:How to insert key value pairs to new unordered_map<int, int>* (pointer) in C++?如何在 C++ 中将键值对插入新的 unordered_map<int, int>*(指针)?
【发布时间】:2021-04-03 03:27:24
【问题描述】:

我在结构中有一个 unordered_map 指针,因为我需要它在共享内存中,以便在程序运行时访问和修改。

struct Umaps {std::unordered_map<int, int> *node_index;} ;

然后我在另一个函数中初始化 unordered_map、node_index。

Umapsptr->node_index = new std::unordered_map<int, int>();

其中 Umapsptr 是指向我的函数中 Umaps 结构的指针。然后我尝试将值插入到 unordered_map。

Umapsptr->node_index[5] = 10;

但我收到此错误,我不知道如何解决:

错误:“operator=”不匹配(操作数类型为“std::unordered_map”和“int”) Umapsptr->node_index[5] = 10;

我做错了什么?任何帮助都将不胜感激。

【问题讨论】:

  • 记住你的基本指针内容:如果你有一个指针Type *p,那么p[n] 会说“给我Type 对象在n 的偏移量np 中保存的基地址”。简而言之,该索引是错误的。 Umapsptr-&gt;node_index-&gt;at(5) = 10; 会做你想做的事。
  • 您所说的“共享内存”是什么?您是在谈论在进程之间或代码的不同部分之间共享内存吗?如果是前者,您将在跨进程共享这样的 C++ 对象时遇到一些麻烦。如果是后者,你真的想说“全局内存”,没问题。
  • 谢谢@WhozCraig!我现在看到了。我的意思是全局内存@selbie,感谢您的更正:)

标签: c++ pointers unordered-map


【解决方案1】:

[] 应用于指针会执行指针运算。您想将[] 应用于指向的对象,因此您需要显式取消引用指针:

(*Umapsptr->node_index)[5] = 10;

如果您知道密钥 5 已经在地图中,则可以改用 at

Umapsptr->node_index->at(5) = 10;

但是如果密钥不存在,这将引发异常。如果您知道密钥不存在,则可以使用 emplace:

Umapsptr->node_index->emplace(5, 10);

但如果密钥已经存在且具有不同的值,这将无济于事。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-06-20
    • 2021-02-09
    • 1970-01-01
    • 2011-06-19
    • 2018-05-06
    • 2019-03-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多