如何使用初始数据和自定义比较器声明 stl::priority_queue?
How to declare an stl::priority_queue with initial data and custom comparator?
我的结构需要 priority_queue
。我想使用数组中的初始数据和自定义比较器构建一个:
class mycomparison
{
public:
mycomparison(const bool& maxOnTop=false, const int& compField = 0);
...
};
mergeRecord initialRecords[N]; // my array
mycomparison(false, field); // my custom comparator
std::priority_queue<mergeRecord, std::vector<mergeRecord>, mycomparison>
recsHeap(???);
在 cplusplus 参考资料中,有一个示例说明如何使用比较器 或 具有初始值的数组来初始化 priority_queue
对象。我该怎么做呢?我知道我可以一个一个地插入它们,但这会花费 O(nlogn) 而一次传递它们是 O(n)。
std::priority_queue
的范围构造函数允许您将比较函数作为可选参数传入:
template <class InputIterator>
priority_queue (InputIterator first, InputIterator last,
const Compare& comp = Compare(),
const Container& ctnr = Container());
所以就这样称呼它:
std::priority_queue<mergeRecord,std::vector<mergeRecord>,mycomparison>
recsHeap(std::begin(initialRecords), std::end(initialRecords), mycomparison(false,field));
在下面的示例中,std::greater<int>
是比较函数,myints
是一个整数数组。我们可以创建一个 priority_queue my_priority_queue
如下:
int myints[]= {10,60,50,20};
std::priority_queue<int, std::vector<int>, std::greater<int> >
my_priority_queue(myints,myints+4);
在你的例子中:
priority_queue<mergeRecord,std::vector<mergeRecord>,mycomparison>
recsHeap (mergeRecord, mergeRecord+ kWayMerge,mycomparison(false,field));
我的结构需要 priority_queue
。我想使用数组中的初始数据和自定义比较器构建一个:
class mycomparison
{
public:
mycomparison(const bool& maxOnTop=false, const int& compField = 0);
...
};
mergeRecord initialRecords[N]; // my array
mycomparison(false, field); // my custom comparator
std::priority_queue<mergeRecord, std::vector<mergeRecord>, mycomparison>
recsHeap(???);
在 cplusplus 参考资料中,有一个示例说明如何使用比较器 或 具有初始值的数组来初始化 priority_queue
对象。我该怎么做呢?我知道我可以一个一个地插入它们,但这会花费 O(nlogn) 而一次传递它们是 O(n)。
std::priority_queue
的范围构造函数允许您将比较函数作为可选参数传入:
template <class InputIterator>
priority_queue (InputIterator first, InputIterator last,
const Compare& comp = Compare(),
const Container& ctnr = Container());
所以就这样称呼它:
std::priority_queue<mergeRecord,std::vector<mergeRecord>,mycomparison>
recsHeap(std::begin(initialRecords), std::end(initialRecords), mycomparison(false,field));
在下面的示例中,std::greater<int>
是比较函数,myints
是一个整数数组。我们可以创建一个 priority_queue my_priority_queue
如下:
int myints[]= {10,60,50,20};
std::priority_queue<int, std::vector<int>, std::greater<int> >
my_priority_queue(myints,myints+4);
在你的例子中:
priority_queue<mergeRecord,std::vector<mergeRecord>,mycomparison>
recsHeap (mergeRecord, mergeRecord+ kWayMerge,mycomparison(false,field));