C++-返回向量中最大元素的最有效方法小于给定的输入
C++ - Most efficient way to return largest element in vector less than given input
给定一个未排序的向量和一个相同类型的输入元素,在向量中找到小于给定元素的最大元素的最有效方法是什么?这就是我目前所拥有的:
std::vector<double> vec{1,2.2,3.5,4};
double elem = 3;
double lessThan(double elem, std::vector<double> vec)
{
std::vector<double> tmp = vec;
tmp.push_back(elem);
sort(tmp.begin(), tmp.end());
return *(find(tmp.begin(), tmp.end(), elem) - 1);
}
lessThan(elem, vec); //returns 2.2
感谢
首先,不要按值传递向量,因为复制向量会导致值传递并写入内存,这既昂贵又不必要。
接下来,不要sort()
元素:这只是昂贵和不必要的。只需进行线性搜索,记住迄今为止找到的最大合适值。您可以使用max_element()
,并将大于截止值的元素视为相等类。
我可以写代码,但我不想破坏你解决家庭作业的娱乐。
最有效的方法是编写自己的函数。:)例如
#include <iostream>
#include <vector>
std::vector<double>::const_iterator lessThan( const std::vector<double> &v,
double value )
{
auto first = v.begin();
while ( first != v.end() && !( *first < value ) ) ++first;
auto max = first;
for ( ; first != v.end(); ++first )
{
if ( *first < value && *max < *first ) max = first;
}
return max;
}
int main()
{
std::vector<double> v = { 1, 2.2, 3.5, 4 };
double value = 3.0;
auto max = lessThan( v, value );
if ( max != v.cend() )
{
std::cout << "The maximum value less than " << value
<< " is " << *max << std::endl;
}
return 0;
}
程序输出为
The maximum value less than 3 is 2.2
感谢@Dietmar Kühl的建议。我为家庭作业制作了这个版本:
#include<vector>
#include<iostream>
#include <algorithm>
int main ()
{
std::vector<double> vec{2.7,1,2.2,3.5,4,2.8,3.0};
double elem = 3;
auto it = std::max_element(vec.begin(),vec.end(),
[elem](const double &x,const double &y)
{
if(y<elem & x<y) return true;
else return false;
});
std::cout<<*it<<std::endl;
return 0;
}
相关文章:
- 为不同配置设置MSVC_RUNTIME_LIBRARY的正确方法是什么
- 通过方法访问结构
- 最小硬币更换问题(自上而下方法)
- C++为构建时间获取QDateTime的可靠方法
- 在C#中处理C++指针而不使用unsafe的最佳方法
- 处理多个异常集合的C++方法
- 如果C++类在类方法中具有动态分配,但没有构造函数/析构函数或任何非静态成员,那么它仍然是POD类型吗
- 有什么方法可以遍历结构吗
- 当类在C++中定义时,有什么方法可以"register"类吗?
- 在C++中,将大的无符号浮点数四舍五入为整数的最佳方法是什么
- 实现无开销push_back的最佳方法是什么
- 使用std::函数映射对象方法
- 处理小于cpu数据总线的数据类型.(c++转换为机器代码)
- 有符号的int和int-有没有一种方法可以在C++中区分它们
- C++从另一个类访问公共静态向量的正确方法是什么
- C++优先级队列,按对象的唯一指针的特定方法升序排列
- 当数量小于初始化索引时确定数组中元素数的方法
- C++-返回向量中最大元素的最有效方法小于给定的输入
- 有没有一种方法可以为std::map中小于给定键的第一个元素找到反向迭代器
- 是否有一种方法可以正确地比较一个float值是否大于/小于另一个