我希望有一个具有自定义排序的优先队列,但是因为懒惰,我不想定义一个实现operator()的比较器类。
我真的很希望像这样编译:
std::priority_queue<int, std::vector<int>,
boost::bind(some_function, _1, _2, obj1, obj2)> queue;
其中some_function是一个返回布尔值的函数,它接受四个参数,第一个和第二个参数是队列中的整数,最后两个参数是用于计算排序的一些对象(const引用)。
(错误:'boost :: bind'不能出现在常量表达式中)
但这段代码无法编译。即使是更简单的
std::priority_queue<int, std::vector<int>, &compare> queue;
无法编译,因为compare是一个返回bool的二元函数。
(错误:在模板参数列表中的第3个参数处的类型/值不匹配,应该是一个类型,但实际上得到的是‘compare’)
有什么建议吗?
boost::bind
上没有闭合括号 - 在队列模板参数的 > 之前。这是发布的代码中的笔误还是你尝试编译时的笔误? - Steve Townsend