从满足特定条件的std :: list中获取最小项

时间:2016-04-04 14:43:41

标签: c++ c++11 functional-programming

我正在寻找一种解决我在C ++中使用的列表迭代/排序问题的功能方法。

考虑以下类型的元素列表:

struct SomeElement
{
    /* ... functions and and additional data omitted ... */
    int weight;
}

存在std::list<SomeElement>或事件std::vector<SomeElement>。我想查询该列表以返回以下元素:

  1. 满足给定条件,即MyPredicate(someElement) == true
  2. 具有满足条件的所有对象的weight属性的最小值。
  3. 我的列表中包含任意数量的元素,并且所有元素都可以满足给定条件。

    我知道如何一般地做到这一点,例如,我可以对列表进行排序,然后使用std::find_if选择满足条件的第一个对象,或者使用for循环简单地循环它,但是,我想以功能的方式解决问题。

    有没有办法可以在C ++中使用列表谓词,生成器表达式和列表推导?我想写下以下内容:

    myList
        .where((SomeElement const& e) { MyPredicate(e); })
        .min([](SomeElement const& a, SomeElement const& b) { a.weight < b.weight; });
    

    是否可以使用C ++的STL或Boost库?

0 个答案:

没有答案