【问题标题】:How to insert into `std::map<string, double>* myMap`?如何插入`std::map<string, double>* myMap`?
【发布时间】:2019-05-05 15:12:59
【问题描述】:

我已经像这样初始化了一个地图:

map<string, double>* myMap = new map<string, double>();

此声明不能更改!

我试着像这样插入它:

myMap["hi"] = 20.0;

myMap->insert ("hi", 20.0);

正确的方法是什么?

【问题讨论】:

  • 为什么要动态分配地图?
  • 签名在规范中给出,所以我无法更改。
  • 动态分配地图很奇怪,也是造成你困难的主要原因。
  • @Const,是的,奥利奥特的回答有帮助。指导方针说不要发表评论只是说“谢谢”所以我没有,因为有时这个网站上的人有点粗鲁,所以我不想违反规则! :) 其他一些答案可能也解决了这个问题,但在它解决后我就停止阅读了。
  • 因为这个网站上的人有时有点粗鲁 哈哈.. 不是所有的人,而且绝对不是you ask per the guidelines provided in the community page

标签: c++ pointers stdmap


【解决方案1】:

myMap 是您案例中的指针。为什么用new分配地图?这样做:

map<string, double> myMap;
myMap["hi"] = 20.0;

或者如果你仍然想动态分配它,那么取消引用指针

(*myMap)["hi"] = 20.0;

或使用-&gt; 致电operator[]

myMap->operator[]("hi") = 20.0;

insert 期望 std::map::value_type 在您的情况下是 std::pair&lt;const string, double&gt;。像这样称呼它:

myMap->insert(make_pair("hi", 20.0));

myMap->insert({"hi", 20.0});

请注意,如果已存在具有相同键的条目,则使用方括号(任一形式)将替换该条目的值,而使用insert(任一形式)将不做任何事情并保留先前的值。 (来自@aschepler 评论)

【讨论】:

  • 我更新了问题。你能帮我插入给定的声明吗?
  • 请注意,如果已存在具有相同键的条目,则使用方括号(任一形式)将替换该条目的值,而使用insert(任一形式)将不执行任何操作并保留仅以前的值。
  • @aschepler 谢谢,更新了您评论中的答案。
猜你喜欢
  • 2011-04-07
  • 1970-01-01
  • 2014-08-15
  • 2019-10-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-10-22
  • 1970-01-01
相关资源
最近更新 更多