我有2张地图:
map<int,BigObject> a,b;
如果a和b不共享任何键是有办法合并b成a,这不会复制BigObject对象?
复制BigObject物体是一个瓶颈.
你应该做的第一件事是BigObject移动便宜,也许可以不复制.实现这一目标的一种方法是将他们庞大而昂贵的状态转变为一种状态std::unique_ptr< InternalState >.如果你仍然需要复制(我发现你经常不这样做),你可能想要一个value_ptr< InternalState >,或者从库中获取值ptr boost或者编写自己的值.
如果做不到这一点,你可以等待C++ 17.在C++ 17中,(某些?)基于关联节点的容器能够快速移动它们之间的节点集.这包括std::map.
如果做不到这一点,你的地图就可以从钥匙到unique_ptr<BigObject>.这为地图的其他用途添加了少量间接,但它们现在可以便宜地移动.