如果存在密钥,则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有一个[]运算符。但它返回参考?我不确定使用它是否安全。
谢谢,
答案 0 :(得分:2)
我想这就是std :: map insert的工作原理
没有。实际上,std::map::insert
查找匹配的键并将迭代器返回到现有元素(如果找到)。它确实不替换。 (您可能会对operator[]
感到困惑,它会返回对新/现有元素的左值引用。)
ptr_map有一个[]运算符。但它返回参考?我不确定使用它是否安全。
当然可以。但是,如果元素类型是多态的,则应不分配给引用。 (可以说,多态值类型是Boost Pointer Containers的一个关键用例)。因为如果你这样做,你最终可能会得到对象切片(What is object slicing?)。
如果你真的想用/ other对象替换对象(托管指针)/使用ptr_map::replace
。如果您只需要更新地图中已有的对象,请随时使用operator[]
。