ang*_*tro 5 c++ constructor priority-queue functor
我想做这个:
#include <queue>
#include <set>
class Comparator
{
public:
Comparator(SomeObject& rTool) : mrTools(rTool) {}
bool operator()(const std::string& a, const std::string& b)
{
return mrTools.doSomething(a,b);
}
private:
SomeObject& mrTools;
}
std::priority_queue<std::string, std::set<std::string>, Comparator> queue;
//<- this doesn't compile
Run Code Online (Sandbox Code Playgroud)
如何初始化此队列,为Comparator提供构造函数中所需的引用?
您可以提供Comparator构建它的实例; 否则Comparator()将用作构造函数std::priority_queue的默认参数,但Comparator没有默认构造函数.例如
SomeObject so;
std::priority_queue<std::string, std::set<std::string>, Comparator> queue(Comparator(so));
Run Code Online (Sandbox Code Playgroud)
BTW:std::set不满足底层容器的要求std::priority_queue.你可以使用std::vector或std::deque代替.
用于存储元素的基础容器的类型.容器必须满足SequenceContainer的要求,其迭代器必须满足RandomAccessIterator的要求.此外,它必须提供以下通常语义的函数:
- 面前()
- 推回()
- pop_back()
标准容器std :: vector和std :: deque满足这些要求.
这与你无关,而与不满足要求Comparator有关。您可以使用or ,或编写自己的,确保实现、and 、 and具有std::setSequenceContainervectordequeSequenceContainerfrontpush_backpop_backiteratorRandomAccessIterator