26、C++集合容器使用指南:指针、智能指针与多重集合

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>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值