如何在特定构造函数中使用STL priority_queue +比较器?
我想这样做:如何在特定构造函数中使用STL priority_queue +比较器?
#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
我怎样才能initalize这个队列提供比较它在构造函数中所需要的参考?
回答:
这与您的Comparator
无关,以及与std::set
不符合SequenceContainer
要求的任何事情。您可以使用vector
或deque
,或者自己写SequenceContainer
,确保实现front
,push_back
和pop_back
,并有iterator
S中的RandomAccessIterator
回答:
您可以提供的Comparator
实例,从而构建它;否则Comparator()
将用作constructor of std::priority_queue
的默认参数,但Comparator
不具有默认构造函数。例如
SomeObject so; std::priority_queue<std::string, std::set<std::string>, Comparator> queue(Comparator(so));
顺便说一句:std::set
不满足std::priority_queue
底层容器的要求。您可以改用std::vector
或std::deque
。
用于存储元素的底层容器的类型。容器必须满足SequenceContainer的要求,其 迭代器必须满足RandomAccessIterator的要求。 此外,它必须提供以下功能与通常的 语义:
- 前()
- 的push_back()
- pop_back()
标准集装箱std::vector和std::deque满足这些 要求。
以上是 如何在特定构造函数中使用STL priority_queue +比较器? 的全部内容, 来源链接: utcz.com/qa/264009.html