21xrx.com
2024-12-22 22:09:56 Sunday
登录
文章检索 我的文章 写文章
C++ 查找最接近的元素
2023-07-05 06:29:40 深夜i     --     --
C++ 查找 最接近的元素

在C++中,查找最接近的元素是一项非常重要的操作,因为它可以解决很多实际问题,比如在一个数组中查找与给定元素最靠近的项,或者在一个有序列表中查找最接近给定值的项。

为了实现这个功能,我们可以使用一些C++中的内置函数和算法。其中,最常用的函数是std::lower_bound()和std::upper_bound(),它们是标准库 中的函数。

std::lower_bound()函数是用来查找给定区间内第一个大于或等于目标值的元素,并返回它的迭代器,如果没有找到符合条件的元素,则返回区间尾后迭代器。

std::upper_bound()函数则是用来查找给定区间内第一个大于目标值的元素,并返回它的迭代器,如果没有找到符合条件的元素,则返回区间尾后迭代器。

通过这两个函数,可以很容易地找到最接近给定值的元素,只需要分别使用目标值-1和目标值+1来查找较小和较大的元素,比较它们与目标值的距离,即可得到最接近的元素。

下面是一个示例代码,用来演示如何使用这两个函数来查找最接近的元素:


#include<iostream>

#include<algorithm>

#include<vector>

#include<cmath>

using namespace std;

int main()

{

  vector<int> v1 = 14; // 定义一个有序数组

  int target = 11; // 要查找的目标值

  auto lb = lower_bound(v1.begin(), v1.end(), target); // 查找第一个大于等于目标值的元素

  auto ub = upper_bound(v1.begin(), v1.end(), target); // 查找第一个大于目标值的元素

  if(lb == v1.end()) // 如果lower_bound()没找到任何元素

  

    cout<<"No element found"<<endl;

    return 0;

  

  if(lb == v1.begin()) // 如果lower_bound()找到的是第一个元素

  {

    cout<<"Closest element is "<<*lb<<endl;

    return 0;

  }

  if(ub == v1.end()) // 如果upper_bound()找到的是最后一个元素

  {

    cout<<"Closest element is "<<*(--lb)<<endl;

    return 0;

  }

  int diff1 = *lb - target; // 离目标值更近的元素

  int diff2 = target - *(--lb); // 离目标值更近的元素

  if(diff1 < diff2) // 如果第一个元素离目标值更近

  {

    cout<<"Closest element is "<<*lb<<endl;

  }

  else // 如果第二个元素离目标值更近

  {

    cout<<"Closest element is "<<*ub<<endl;

  }

  return 0;

}

这段代码中,我们首先定义了一个有序数组v1,然后初始化了一个目标值target。接着,我们使用lower_bound()和upper_bound()函数来查找最接近的元素,如果无法找到符合条件的元素,则返回区间尾后迭代器。

最后,我们根据离目标值更近的元素来输出结果。运行这段代码,我们可以得到输出结果“Closest element is 10”,这意味着10是与11最接近的元素。

总的来说,通过C++内置函数和算法,查找最接近的元素变得非常简单和高效。无论是在编写搜索算法,还是查找相似项等场合,这些函数都能够派上用场。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复