带有捕获的比较器

comparator with capture

本文关键字:比较器      更新时间:2023-10-16

我想创建一个带有比较器的boost::binomial_heap,该比较器使用外部数据,类似

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

(例如,这里的price是二重的vector。)

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

下面的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};

定义向量CCD_ 5。

线路

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

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

线路

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

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