我想这样做:
#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
我如何初始化此队列,为Comparator提供构造函数中所需的引用?
答案 0 :(得分:6)
您可以提供Comparator
的实例来构建它;否则Comparator()
将被用作constructor of std::priority_queue
的默认参数,但Comparator
没有默认构造函数。 e.g。
SomeObject so;
std::priority_queue<std::string, std::set<std::string>, Comparator> queue(Comparator(so));
BTW:std::set
不满足std::priority_queue
的基础容器的要求。您可以改为使用std::vector
或std::deque
。
用于存储元素的基础容器的类型。该 容器必须满足SequenceContainer及其要求 迭代器必须满足RandomAccessIterator的要求。 此外,它必须提供通常的以下功能 语义:
- 前()
- 的push_back()
- pop_back()
标准容器std::vector和std::deque满足这些要求 要求。
答案 1 :(得分:1)
这与您的Comparator
无关,而与std::set
无关,无法满足SequenceContainer
的要求。您可以使用vector
或deque
,也可以编写自己的SequenceContainer
,确保实施front
,push_back
和pop_back
,并{ {1}} iterator