用于查找满足条件的最小对象的仿函数

时间:2015-12-10 02:39:17

标签: c++ functor

假设我们有std::vector<Obj>其中

struct Obj {
    int size;
    bool valid;
}

如何编写一个与std::min_element()一起使用的仿函数来查找最小的有效 Obj

2 个答案:

答案 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