如何在特定构造函数中使用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要求的任何事情。您可以使用vectordeque,或者自己写SequenceContainer,确保实现frontpush_backpop_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::vectorstd::deque

用于存储元素的底层容器的类型。容器必须满足SequenceContainer的要求,其 迭代器必须满足RandomAccessIterator的要求。 此外,它必须提供以下功能与通常的 语义:

  • 前()
  • 的push_back()
  • pop_back()

标准集装箱std::vector和std::deque满足这些 要求。

以上是 如何在特定构造函数中使用STL priority_queue +比较器? 的全部内容, 来源链接: utcz.com/qa/264009.html

回到顶部