《白话C++》第10章 Page136 常用容器 10.6.5 std::set和std::multiset (未完待续)

2.插入元素

前面看到multiset的insert操作,返回插入的位置(迭代器),set不允许插入比较结果相同的元素,调用insert就有可能失败,

所以set 的insert函数的返回值,和multiset的不一样:

std::pair <iterator, bool> insert(const value_type& elem);

set如果插入新元素失败,那么返回中的“second”值为false.

回忆vector,list等容器,它们的insert都还有一个“pos”的入参,用于只是新元素插在哪个位置上,前面使用的sets的insert函数没有这个指示。

这很好理解,因为一个元素要插在sets(复数,表示set和multiset,下同)中的哪个位置,这是调用者控制不了的。不过,sets却又拥有一个带pos版本的insert函数:

iterator insert(const_iterator hint_pos
                , const value_type& value);
//这里列的是C++ 11的版本,老版本中hint_pos是iterator类型

当小朋友们在按身高排队时,新插入的同学肯定会大概估计一下自己的身高应该在那个同学前后,哪怕是5岁的小朋友也不会笨到从第1个比起……

hint_pos正是起“位置提示”作用的,sets会以该迭代器作为判断起点,只要不是瞎提示,通常它的性能会较大提高,带“hint”版的insert函数的另一个作用就是让sets拥有和其他容器接口一致的insert操作。

sets带“hiint”版的insert,返回一个迭代器,要么是成功插入后的位置,要么是阻止本次插入的位置,要靠这个返回结果判断是否真正插入,有点难。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值