c++ - 如何从小于特定值的向量中获取前 3 个值?
问题描述
我有一个向量 {42.195 42.195 39.025 40.075 34.220 42.195 39.750}。在这里,我想获得仅小于 42.195 的前 3 个值。下面是我的方法。
- 我按降序对向量进行了排序。
- 初始化一个输出向量和一个计数器=0。
- 然后我遍历向量并检查元素是否不等于42.195。如果是这样,请增加计数器。如果计数器值 <= 3,则将该元素推入输出向量。一旦计数器值大于 3,就跳出 for 循环并返回输出向量。
上述方法在逻辑上看起来不错,但是在将每个元素与 42.195 值进行比较时,代码无法正常工作。请帮我。
#include<bits/stdc++.h>
#include<vector>
using namespace std;
int validateData(vector<float> &arr){
for(int i = 0 ; i < arr.size() ; i++){
if(arr[i] <= 0.0){
cout<<"\nInvalid data";
return -1;
}
}
return 0;
}
vector <float> getTop3(vector<float>& arr){
if(validateData(arr) == -1)
cout<<"\nCannot perform operation";
else {
vector<float> output;
int count = 0;
cout<<"Sorted values are: \n";
sort(arr.begin(), arr.end(), greater<float>());
for(int i = 0 ; i < arr.size() ; i++){
cout<<arr[i]<<" ";
}
for(int i = 0 ; i < arr.size() ; i++){
if(arr[i] != 42.195) {
count++;
if(count <= 3)
output.push_back(arr[i]);
else
break;
}
}
cout<<"\nOutput vector is\n";
for(int i = 0 ; i < output.size() ; i++){
cout<<output[i]<<" ";
}
return output;
}
}
int main(int argc, char *argv[]){
vector<float> arr;
cout<<"Arguments are:\n";
for(int i = 1 ; i < argc ; i++){
arr.push_back(stof(argv[i]));
}
for(int i = 0 ; i < arr.size() ; i++){
cout<<arr[i]<<" ";
}
cout<<"\n";
//Function call
getTop3(arr);
}
下面是输出。
解决方案
std::partition
其次std::nth_element
可以做的工作:
std::vector<float> get_top3(std::vector<float> v, float threshold)
{
auto end = std::partition(v.begin(), v.end(), [&](auto f){ return f < threshold; });
if (std::distance(v.begin(), end) <= 3) return {v.begin(), end};
std::nth_element(v.begin(), v.begin() + 3, end, std::greater<>{});
return {v.begin(), v.begin() + 3};
}
int main() {
std::vector<float> arr = {42.195, 42.195, 39.025, 40.075, 34.220, 42.195, 39.750};
for (auto f : get_top3(arr, 42.195))
std::cout << f << " ";
}
您的问题之一是:42.195 != 42.195f
.
推荐阅读
- python - 在具有不同键的字典字典中搜索值的最 Pythonic 方法是什么?
- c# - FirstDisplayedScrollRowIndex 未设置
- javascript - 如何关闭地图点击事件
- random - 使用 vb6 生成大量 32 位随机数
- symfony - 无法访问 Symfony API 路由并获取 Symfony 策略页面
- java - 如何从文档中检索嵌套对象并将其显示在 FirestoreRecyclerOptions 中?
- tensorflow - Training Loss随着数据大小的增加而增加,并且训练精度几乎保持不变
- r - 如何最好地在 R 中的数据框中将不同级别的因子相互划分?
- c# - 如何使用 EPPLUS 和 .net mvc 在空白页上生成 excel?
- d3.js - 选择元素并使用 selectAll 和 classed 对其进行样式设置不起作用