如何使用初始数据和自定义比较器声明 stl::p riority_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));
相关文章:
- 在C++STL中是否有Polyval(Matlab函数)等价物?
- 为什么这个运算符<重载函数对 STL 算法不可见?
- 在C应用程序中运行C++(带有STL)函数
- 使用2个键的cpp-stl::优先级队列排序不正确
- 在STL容器中使用模板类
- 用C++中的CPerson(类)类型的对象初始化STL矢量
- 将stl字符串缩小到小于15个字符的容量
- 在为LINUX创建共享库时,如何避免STL的私有/弱副本
- 检查函数返回类型是否与STL容器类型值相同
- STL算法函数在多个一维容器上的使用
- 在STL - C++中按成绩对学生列表进行排序?
- 为什么 STL 容器适配器堆栈中的 top 返回常量引用?
- λ可以适应STL吗?
- 为什么使用 NDK 不能存在不同的 stl 实现?
- 如果我真的真的想从 STL 容器继承,并且我继承构造函数并删除新运算符,会发生什么?
- 使用 char 分隔符解析C++中的字符串,但将可重复的字符保留为每个解析的子字符串 (C++ STL) 中的分隔符
- 在C++中迭代 STL 集时出现奇怪的问题<CStudent>
- 如何在 C++17 STL 并行算法中处理调度?
- 在学习数据结构之前对STL有一个了解是好的吗?
- C++ STL 排序会检查 NaN 吗?