gpt4 book ai didi

c++ - 通过引用获取 std::map 中的对象是否安全?

转载 作者:IT老高 更新时间:2023-10-28 22:08:27 24 4
gpt4 key购买 nike

我有一张这样的 map

map<int,object> objmap;
object& obj = objmap.find(num)->second;
object& obj2 = objmap[num];

我对对象所做的任何更改都必须反射(reflect)在 map 上。类似的事情不能在 vector 中完成,因为它在需要更多空间时会改变对象的位置。在 std::map 中执行此操作是否安全?这是可取的吗?第二个版本给出了一个错误,因为我的对象没有空的构造函数。如果我声明一个空的构造函数什么都不做,这两行会以同样的方式工作吗?

最佳答案

只要有问题的对象没有从 map 中删除,那么是的,它是安全的。一旦插入到 map 中,即使添加或删除其他元素,对象也不会四处移动。

object& obj = objmap.find(num)->second;

这有潜在的危险,除非您确定键为 num 的元素确实存在于 map 中。如果你不确定,你可以使用 insert 的重载,它返回一个 iterator 和一个 bool 来指示是否插入了新元素或具有给定键的元素已存在于 map 中。

例如

object& obj = objmap.insert( std::make_pair(num, object(arg1, arg2, argN)) ).first->second;

关于c++ - 通过引用获取 std::map 中的对象是否安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4555616/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com