【发布时间】:2017-10-10 01:33:35
【问题描述】:
我有这样的数据结构:
struct Speed {
int set; //set by user
int act; //actual speed
int millis; //millis since epoch
}
vector<Speed> data;
现在我想绘制这个向量。为了创建一个漂亮的轴,我想在这个向量中找到数据的最大值和最小值。我确实喜欢这个,但很明显,因为它只基于set,如果在任何时候act 小于或大于set,我都会失败。我的意思是图表的Y 轴应该在set, act 的最小值和set, act 的最大值之间。
auto max = std::max_element(begin(data), end(data),
[&](const Speed& a, const Speed& b){
return a.set() < b.set();
//how about act?
});
auto min = std::min_element(begin(data), end(data),
[&](const Speed& a, const Speed& b){
return a.set() < b.set();
//how about act?
});
**我知道 ** 如何编写不涉及算法和 lambda 的普通代码来实现结果...但我很想看看如何在没有运算符重载的结构中使用 algorithm/lambda .
我也可以对 act 执行相同的操作,然后比较结果...但这会花费我 4 个循环!
【问题讨论】:
-
不清楚您希望比较如何进行?你想要最小/最大的场景和行为吗?平均值?集合和行为之和的最小值/最大值?有很多方法可以比较两个值。
-
@Jonesinator 我只想让图表的最小值和最大值涵盖两个值范围
-
您的问题是关于为两个属性(set、act)构建比较函数吗?
-
您想要设置最小/最大元素 w.r.t 以及最小/最大元素 w.r.t 动作,还是最小/最大元素 w.r.t 同时设置 和 动作?跨度>
-
@Daniel w.r.t 当然!
标签: c++ c++11 stl-algorithm