如何将数据插入到一个参数是对象的地图中?

时间:2015-06-09 09:15:17

标签: c++ stl

我将一个类定义为:

    class Normal
    {
        bool value;
        float time;
        public:
            Normal(bool val,float time): value(val),time(time) {}
    }

另外,我已将地图变量声明为:

    map<string,Normal> myMap;

现在我想在此地图中插入数据。 这种插入方式是否正确?

    Normal temp(true,45.04);
    myMap.insert(pair<string,Normal>("one",temp));

    myMap["one"]=temp;

我应该如何将数据插入地图?

2 个答案:

答案 0 :(得分:4)

在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)
);

两者都避免在operator[]内默认构造键值对,然后覆盖它。

答案 1 :(得分:-2)

使用此代码

Normal *temp =  new Normal(true,45.9);
mymap.insert(make_pair("one",temp));

避免浅拷贝,因为涉及指针。

编辑:使用插入功能在地图中插入数据。索引不是最好的方法。特别是当你访问 请参阅此链接了解详情 In STL maps, is it better to use map::insert than []?

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;
    }

  }