假设我们有std::vector<Obj>
其中
struct Obj {
int size;
bool valid;
}
如何编写一个与std::min_element()
一起使用的仿函数来查找最小的有效 Obj
。
答案 0 :(得分:0)
我认为这有效,但我的测试可能不够好......
auto ObjComp = [](Obj &a, Obj &b) {
return !b.valid || (a.valid && a.size < b.size);
};
答案 1 :(得分:0)
在找到std::min_element
之前,您可以std::partition
。
auto validity = [](const Obj& x) {
return x.valid;
};
auto by_size = [](const Obj& lhs, const Obj& rhs) {
return lhs.size < rhs.size;
};
auto pivot = std::partition(v.begin(), v.end(), validity);
auto valid_minimum = std::min_element(v.begin(), pivot, by_size);
if (valid_minimum == pivot) {
std::cout << "No *active* minimum found!\n";
}
如果容器中的排序以某种方式重要,那么还有std::stable_partition
。