lower_bound && upper_bound

本文详细解析了C++ STL中的lower_bound和upper_bound函数,它们使用二分查找在有序数组中分别找到第一个大于等于指定值和第一个大于指定值的元素。通过实例演示了如何使用这两个函数,并解释了输出地址、下标和值的意义。

lower_bound && upper_bound 都是用二分的方法在一个有序的数组中查找。

lower_bound(begin,end,x) 是查找第一个大于等于x的数,

upper_bound(begin,end ,x)是查找第一个大于x的数。

 

#include <bits/stdc++.h>
using namespace std;

const int n=6;

int main()
{
	int x=20;
	int a[n]={10,20,20,20,40,50};
	//lower_bound(a,a+n,x) 在a数组中查找第一个大于等于x(20)的数,一看就知道,那个数是a[1]=20(下标从0开始)
	
    cout<<lower_bound(a,a+n,x)<<endl; //输出的是一个地址 
	cout<<lower_bound(a,a+n,x)-a; //输出的是查到数的下标 在这个例子中输出1 
	cout<<*lower_bound(a,a+n,x); //值,输出那个数 即20
	return 0; 
 } 
 //upper_bound用法同上 

 

### `multiset` 中 `upper_bound` 和 `lower_bound` 的使用方法与区别 在 C++ 的 `multiset` 中,`lower_bound` 和 `upper_bound` 是两个用于查找特定值范围的函数。它们返回的是迭代器,分别指向第一个不小于给定值的元素和第一个大于给定值的元素。 #### `lower_bound` 函数 `lower_bound(const key_type& key)` 返回一个迭代器,指向 `multiset` 中第一个不小于 `key` 的元素。如果所有元素都小于 `key`,则返回 `end()`。例如,在一个包含重复元素的 `multiset` 中,该函数可用于找到第一个等于或大于指定值的元素位置。 示例代码如下: ```cpp #include <set> #include <iostream> int main() { std::multiset<int> ms = {1, 2, 2, 2, 4}; auto it = ms.lower_bound(2); std::cout << "lower_bound(2): " << *it << std::endl; // 输出 2 return 0; } ``` #### `upper_bound` 函数 `upper_bound(const key_type& key)` 返回一个迭代器,指向 `multiset` 中第一个大于 `key` 的元素。如果所有元素都不大于 `key`,则返回 `end()`。该函数常用于获取所有等于指定值的元素之后的位置。 示例代码如下: ```cpp #include <set> #include <iostream> int main() { std::multiset<int> ms = {1, 2, 2, 2, 4}; auto it = ms.upper_bound(2); std::cout << "upper_bound(2): " << *it << std::endl; // 输出 4 return 0; } ``` #### 区别与应用场景 - **区别**:`lower_bound` 返回的是第一个不小于指定值的元素,而 `upper_bound` 返回的是第一个大于指定值的元素。 - **应用**:这两个函数常用于获取 `multiset` 中所有等于某个值的元素的范围。通过 `lower_bound` 和 `upper_bound`,可以轻松地遍历这些元素。例如,可以使用它们来统计某个值在 `multiset` 中出现的次数。 示例代码演示如何使用这两个函数来获取所有等于指定值的元素: ```cpp #include <set> #include <iostream> int main() { std::multiset<int> ms = {1, 2, 2, 2, 4}; int value = 2; auto lower = ms.lower_bound(value); auto upper = ms.upper_bound(value); std::cout << "Elements equal to " << value << ": "; for (auto it = lower; it != upper; ++it) { std::cout << *it << " "; } std::cout << std::endl; return 0; } ``` 输出结果为:`Elements equal to 2: 2 2 2 `,展示了如何利用 `lower_bound` 和 `upper_bound` 来获取特定值的范围 [^3]。 ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值