如何使用初始数据和自定义比较器声明 stl::p riority_queue

How to declare an stl::priority_queue with initial data and custom comparator?

本文关键字:stl riority queue 声明 比较器 何使用 数据 自定义      更新时间:2023-10-16

我需要为我的结构提供一个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));