我想用一个使用外部数据的比较器创建一个boost::binomial_heap
,比如
bool compare(int a1, int a2)
{
return price[a1] < price[a2];
}
(例如,这里price
是vector
的双打。)
如何声明捕获price
的比较函数?
答案 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
),并将对象作为比较器。使用它与不同的容器将是类似的。