C++集合容器使用指南:指针、智能指针与多重集合
1. 集合容器迭代器与元素修改
集合容器( set<T> )的迭代器类型别名可能会让人产生误解。 set<T> 容器的所有成员函数返回的迭代器都指向 const T 元素,这意味着不能直接修改元素。若要修改集合容器中的元素,必须先删除该元素,再插入修改后的版本。
这是因为集合中的对象本身就是键,容器中对象的位置是通过比较对象来确定的。如果修改元素,可能会破坏元素的顺序,从而影响后续的访问操作。
当需要修改对象并将它们分组到一个或多个集合容器中时,可以在集合容器中存储对象的指针,最好是智能指针。通常会使用 shared_ptr<T> 或 weak_ptr<T> 对象,而存储 unique_ptr<T> 对象意义不大,因为无法直接检索元素,因为不存在与容器中 unique_ptr<T> 对象匹配的独立键。
2. 在集合容器中存储指针
如果对对象的修改可能会改变存储在集合中的这些对象指针的顺序,那么指针的比较函数不能依赖于对象本身。大多数情况下,只关心元素是否在容器中,而不关心其具体顺序。此时,可以使用一个比较函数对象,该对象应用于指针而不考虑它们所指向的对象。
推荐使用 <memory> 头文件中定义的 owner_less<T>
超级会员免费看
订阅专栏 解锁全文
45

被折叠的 条评论
为什么被折叠?



