gpt4 book ai didi

C++ 设置查找值更小但更接近 x

转载 作者:行者123 更新时间:2023-11-30 02:31:44 25 4
gpt4 key购买 nike

我看了lower_boundupper_bound在 C++ STL 中用于 <set> .但是,我找不到一种方法来获取最接近(从下方)到集合中另一个值的值。是否有一种简单的方法来获得它,或者我是否必须迭代该集合?

例如,假设我的集合包含以下整数 3 4 7 9 , 然后 closest(6) = 4closest(4) = 4 .

最佳答案

std::upper_bound返回一个大于给定值的元素,因此在您的情况下,您必须递减它才能获得它之前的值。

//Returns value of element before 'num'
int closest = *--set.upper_bound(num);

我会认为 closest(6) = 7,因为 74 更接近 6 >。如果您想得到 7,则必须计算相邻值之间的差值并进行比较。

//Calculate closest value to 'num' in a std::set<int>
int closest(std::set<int>& set, int num)
{
//Get iterator to element greater than 'num'
auto it = set.upper_bound(num);

//Check if 'it' is the 'end' iterator
if (it == std::end(set))
return 0;

int valueLeft = *it--; //Get value of the greater element
int valueRight = *it; //Get value of the element before (due to post-decrement)

//Compare diffence between value less and num, and value greater and num
if (valueLeft - num > num - valueRight)
return valueRight;
else
return valueLeft;
}

std::set<int> set{ 3, 4, 7, 9 };

int a = closest(set, 6); //Returns '7'
int b = closest(set, 4); //Returns '4'

关于C++ 设置查找值更小但更接近 x,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37294267/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com