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