简而言之,使用
是否有效std::map<int, std::set<int> > instead of
std::map<int, boost::shared_ptr<std::set<int>>?
对于vector,我将选择boost :: shared_ptr。但是对于std :: map,我不确定它是否值得。
答案 0 :(得分: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()
方法和/或移动语义,而不是使用共享指针复杂化代码。