STL equal_range()的用法

equal_range()是c++ STL中一种二分查找的方法。

vecotor<int>nums; int val;

auto bounds = equal_range(nums.begin(), nums.end(), val);

这里auto是c++的自动类型推断,可以简化操作。

例如我们要使用vec的迭代器
 

vector<int>vec;
vector<int>::iterator itr;
for (itr = vec.begin(); itr != vec.end(); itr++)
{
	...
}

有了auto,可以简化为

vector<int>vec;
for (auto itr = vec.begin(); itr != vec.end(); itr++)
{
		...
}

equal_range()返回std::pair对象,其first和second成员都成为迭代器,且分别指向输入序列中所有值等于 val 的元素所组成的子序列的起始及末尾(即最后一个元素之后的位置)位置。

first 成员的值等同于 std::lower_bound 执行于同一输入序列后的返回。
second 成员的值等同于 std::upper_bound 执行于同一输入序列后的返回。
如果(nums.begin(),nums.end())并未含“与value等同”的任何元素,以上叙述仍然合理,这种情况下,"与value等同"的所有元素形成的,其实是一个空区间,在不破坏次序的情况下,只有一个位置可以插入value,而equal_range所返回的pair,其first和second(都是迭代器)皆指向该位置。

if (bounds.first == bounds.second)
return{ -1, -1 };
return{ bounds.first - nums.begin(), bounds.second - nums.begin() - 1};

上述代码意思是说,如果nums中没有val,则返回[-1,-1];

如果nums中有val,则返回val元素的起始index和结束index。

例nums = {3,7,7,8,8,10},target = 8;则返回[3,4].
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值