在ptr_map中插入或更新

时间:2018-01-05 19:43:08

标签: c++ boost

如果存在密钥,则ptr_map的insert方法不会更新数据。所以我们需要使用replace:

boost ptr_map replacing the value

ptr_map是否有insertOrUpdate的方式?

1) if a key does not exist, calls insert
2) if it exists, call replace

我想这就是std :: map insert的工作方式。

ptr_map有一个[]运算符。但它返回参考?我不确定使用它是否安全。

谢谢,

1 个答案:

答案 0 :(得分:2)

  

我想这就是std :: map insert的工作原理

没有。实际上,std::map::insert查找匹配的键并将迭代器返回到现有元素(如果找到)。它确实替换。 (您可能会对operator[]感到困惑,它会返回对新/现有元素的左值引用。)

  

ptr_map有一个[]运算符。但它返回参考?我不确定使用它是否安全。

当然可以。但是,如果元素类型是多态的,则应分配给引用。 (可以说,多态值类型是Boost Pointer Containers的一个关键用例)。因为如果你这样做,你最终可能会得到对象切片What is object slicing?)。

如果你真的想用/ other对象替换对象(托管指针)/使用ptr_map::replace。如果您只需要更新地图中已有的对象,请随时使用operator[]