c ++ map元素插入

时间:2013-09-26 13:43:01

标签: c++ map insertion

我想将一个指向对象的指针插入到地图中。这是正确的方法吗?

object myobject[10];
....
mymap.insert( std::pair<int,object*>(pktctr, &myobject[pktctr]));

2 个答案:

答案 0 :(得分:2)

  

这是正确的方法吗?

是的,如果您使用make_pair

,它可能会更好
mymap.insert(std::make_pair(pktctr, &myobject[pktctr]));

或C ++ 11语法:

mymap.insert({pktctr, &myobject[pktctr]});

唯一的危险是你必须确保在销毁myobject之前删除指针或者销毁地图(或者,至少确保指针在此之后从未使用过) 。否则,你将会有一个悬空指针以及等待发生的整个错误世界。

答案 1 :(得分:2)

只要满足以下条件之一,这将有效并且正确(即不会导致未定义的行为):

  • mymapmyobject具有相同的生命周期(它们在相同的范围内声明):您将确定地图比数组更长
  • 指针在myobject生命周期结束之前被删除(那时你将拥有并悬挂指针,指向不再存在的东西)

确保pktctr永远不会越过数组的末尾。

最后,这种语法也可以起作用:

mymap[pktctr] = &myobject[pktctr];

编辑:

  

实际上,在myobject被销毁之前,我正在析构函数中清除地图。

然后你不应该有任何悬空指针问题AFAIK。