C++ 如何在一个参数为对象的地图中插入数据?

C++ 如何在一个参数为对象的地图中插入数据?,c++,stl,C++,Stl,我有一个类法线定义为: class Normal { bool value; float time; public: Normal(bool val,float time): value(val),time(time) {} } 此外,我还声明了一个映射变量: map<string,Normal> myMap; 如何将数据插入地图?使用此代码 Normal *temp = n

我有一个类法线定义为:

    class Normal
    {
        bool value;
        float time;
        public:
            Normal(bool val,float time): value(val),time(time) {}
    }
此外,我还声明了一个映射变量:

    map<string,Normal> myMap;
如何将数据插入地图?

使用此代码

Normal *temp =  new Normal(true,45.9);
mymap.insert(make_pair("one",temp));
避免浅复制,因为涉及指针

编辑:使用插入功能在地图中插入数据。索引不是最好的方法。特别是当您访问 有关详细信息,请参阅此链接

EDIT2:要删除,请使用以下代码

for(std::map<string, Normal*>::iterator itr = mymap.begin();it !=  mymap.end();)
{
  if(it->second != NULL)
   {
      delete (it->second);
      (it->second) = NULL;
      it=mymap.erase(it);
    }
    else
    {
         ++it;
    }

  }
for(std::map::iterator itr=mymap.begin();it!=mymap.end();)
{
如果(它->秒!=NULL)
{
删除(它->第二个);
(it->second)=NULL;
it=mymap.erase(它);
}
其他的
{
++它;
}
}
在C++03中:

myMap.insert(std::make_pair(
    "one",
    Normal(true, 45.04)
));
在C++11中:

m.emplace(std::piecewise_construct,
          std::forward_as_tuple("one"),
          std::forward_as_tuple(true, 45.04)
);

这两种方法都避免在
操作符[]中默认构造键值对,然后覆盖它。

任何原因都禁止您使用
映射
普通*
是指针<代码>临时工
不是一个。你真的想让你的地图包含指针吗?我已经把它改成了
Normal
。那么现在插入数据的正确方法是什么呢?也许读一下,看看
insert
操作符[]
之间的语义差异。找出你需要的是哪一个。OP的代码中没有任何东西表明他们需要动态分配(甚至在编辑之前)。指针并不自动意味着动态分配。@juanchopanza:我完全同意你的看法。但如果您使用指针,最好创建动态指针。我喜欢那样。:)@juanchopanza:你能用一个例子详细解释一下吗。这对我会有很大帮助。@Spanky你不是从映射中删除元素,只是在删除elem.second后将elem.second更新为null。删除后地图大小不会改变。@stophen:是的!!!这是一个很好的观点。编辑代码以添加擦除。这里有一个问题…mymap.clear(),它不会删除所有条目吗?
myMap.insert(std::make_pair(
    "one",
    Normal(true, 45.04)
));
m.emplace(std::piecewise_construct,
          std::forward_as_tuple("one"),
          std::forward_as_tuple(true, 45.04)
);