c++ - std::min - 设计考虑
问题描述
我需要找到五个float
值中的最小值,不包括任何零,以及它在顺序中的位置。
将要使用这段代码的数据量会很大,需要快速处理。这将在处理输入的服务器中24*7
。最小值必须最终在数据库中更新。
在内存和时间使用方面,以下哪一项会更快,或者如果有任何其他更简单的方法,请告诉我。
专
std::max
精于tuple
. 有四个元组值指示<value,location>
.例子,
std::tuple<float,int> f1 (10,1); bool less(float x, float y) { if (x!=0 && x < y) return 0; else return 1; } tuple min (std::initializer_list<tuple> il, bool comp){ what do I do here for initializer list? } int main () { out << get<1>(min({f1,f2,f3,f4,f5},less)); }
- 使用
std::min_element
和重载上面的 less 运算符?使用迭代器 for 会不会是一种矫枉过正float
?
解决方案
两个简单的选择是:
#include <utility>
std::pair<float, unsigned char> my_min(float *a) {
float val = a[0];
unsigned char pos = 0;
for (unsigned char i = 0; i < 5; ++i) {
if (a[i] != 0 && (a[i] < val || val == 0)) {
val = a[i];
pos = i;
}
}
return {val, pos};
}
int main() {
float a[5] = {1, 4, 0.5, 0, 5};
return my_min(a).second;
}
和
#include <utility>
std::pair<float, unsigned char> my_min(float *a) {
float val = a[0];
unsigned char pos = 0;
float *end = a + 5;
for (float *ip = a; ip < end; ++ip) {
float i = *ip;
if (i != 0 && (i < val || val == 0)) {
val = i;
pos = ip - a;
}
}
return {val, pos};
}
int main() {
float a[5] = {1, 4, 0.5, 0, 5};
return my_min(a).second;
}
推荐阅读
- .net - project.assets.json 没有“net472”的目标。确保还原已运行并且您已包含“net472”VS2019
- r - 如何使用 R 将大型 Excel 文件拆分为多个 Excel 文件
- c++ - 这是通过指针从 uint8_t 向量加载对象的安全方法吗?
- python - 如何使用python删除Windows中隐藏的非空文件夹
- laravel - 为 foreach() -laravel 8 提供的参数无效
- android - 如何纠正附加的颤振文档中的这个错误?
- html - 带有香草 HTML 的表单中的单选输入中的多个值
- r - 通过 purrr/map 从模型拟合请求预测时公式不匹配
- java - 在 Java 中使用 Linux 路径时 POST 请求失败
- rabbitmq - 使用来自 bitnami 的 helm3 安装 Rabbitmq 会抛出 chart.metadata 是必需的