捕获比较器

时间:2016-03-26 19:59:42

标签: c++ comparator

我想用一个使用外部数据的比较器创建一个boost::binomial_heap,比如

bool compare(int a1, int a2) 
{
  return price[a1] < price[a2];
}

(例如,这里pricevector的双打。)

如何声明捕获price的比较函数?

1 个答案:

答案 0 :(得分:0)

以下C ++ 11代码显示了如何执行此操作:

#include <vector>
#include <map>
int main()
{   
    std::vector<double> price{0.3, 0.2, 0.1};
    auto cmp = [&price](int i, int j){return price[i] < price[j];};
    std::map<int, float, decltype(cmp)> m(cmp);
    m[2] = 'b';
    m[1] = 'c';
}   

该行

    std::vector<double> price{0.3, 0.2, 0.1};

定义向量price

该行

    auto cmp = [&price](int i, int j){return price[i] < price[j];};

创建一个lambda函数,通过引用捕获price

该行

    std::map<int, float, decltype(cmp)> m(cmp);

创建一个由此类型参数化的容器(在本例中为std::map),并将对象作为比较器。使用它与不同的容器将是类似的。