0

简而言之,使用它是否有效

std::map<int, std::set<int> > instead of
std::map<int, boost::shared_ptr<std::set<int>>?

对于向量,我会选择 boost::shared_ptr。但是对于std::map,我不确定是否值得。

4

1 回答 1

3

文档std::map::insert()http://en.cppreference.com/w/cpp/container/map/insert

没有迭代器或引用无效。

对于std::map::erase() http://en.cppreference.com/w/cpp/container/map/erase

对已擦除元素的引用和迭代器无效。其他引用和迭代器不受影响。

这意味着无论是插入还是擦除都不会移动对象,因此您不必担心复制的费用,除非您需要将已经创建的大对象插入到地图中。但在这种情况下,我会使用std::map::emplace()方法和/或移动语义,而不是使用共享指针使代码复杂化。

于 2015-10-13T16:33:44.190 回答