我将一个类定义为:
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;
我应该如何将数据插入地图?
答案 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;
}
}