白水包 2021-12-30 11:27 采纳率: 0%
浏览 31
已结题

c++使用priority_queue根据已有vector建立小根堆为什么不能使用std::greater<int>()

问题遇到的现象和发生背景

我仿照官网上的大根堆代码写了一个小根堆代码,结果报错了

问题相关代码,请勿粘贴截图

官方代码

std::vector<int> vec={3, 1, 4, 1, 5};
std::priority_queue<int> c3(std::less<int>(), vec);
std::cout << c3.size() << '\n';

我的代码

std::priority_queue<int> q(std::greater<int>(),hand);
运行结果及报错内容
Line 6: Char 34: error: no matching constructor for initialization of 'std::priority_queue<int>'
        std::priority_queue<int> q(std::greater<int>(),hand);
                                 ^ ~~~~~~~~~~~~~~~~~~~~~~~~
/usr/bin/../lib/gcc/x86_64-linux-gnu/9/../../../../include/c++/9/bits/stl_queue.h:505:7: note: candidate constructor not viable: no known conversion from 'std::greater<int>' to 'const std::less<int>' for 1st argument
      priority_queue(const _Compare& __x, const _Sequence& __s)
      ^
/usr/bin/../lib/gcc/x86_64-linux-gnu/9/../../../../include/c++/9/bits/stl_queue.h:510:7: note: candidate constructor not viable: no known conversion from 'std::greater<int>' to 'const std::less<int>' for 1st argument
      priority_queue(const _Compare& __x, _Sequence&& __s = _Sequence())
      ^
/usr/bin/../lib/gcc/x86_64-linux-gnu/9/../../../../include/c++/9/bits/stl_queue.h:584:2: note: candidate template ignored: deduced conflicting types for parameter '_InputIterator' ('std::greater<int>' vs. 'std::vector<int, std::allocator<int>>')
        priority_queue(_InputIterator __first, _InputIterator __last,
        ^
/usr/bin/../lib/gcc/x86_64-linux-gnu/9/../../../../include/c++/9/bits/stl_queue.h:520:2: note: candidate template ignored: requirement 'uses_allocator<std::vector<int, std::allocator<int>>, std::vector<int, std::allocator<int>>>::value' was not satisfied [with _Alloc = std::vector<int, std::allocator<int>>]
        priority_queue(const _Compare& __x, const _Alloc& __a)
        ^
/usr/bin/../lib/gcc/x86_64-linux-gnu/9/../../../../include/c++/9/bits/stl_queue.h:537:2: note: candidate template ignored: requirement 'uses_allocator<std::vector<int, std::allocator<int>>, std::vector<int, std::allocator<int>>>::value' was not satisfied [with _Alloc = std::vector<int, std::allocator<int>>]
        priority_queue(const priority_queue& __q, const _Alloc& __a)
        ^
/usr/bin/../lib/gcc/x86_64-linux-gnu/9/../../../../include/c++/9/bits/stl_queue.h:541:2: note: candidate template ignored: requirement 'uses_allocator<std::vector<int, std::allocator<int>>, std::vector<int, std::allocator<int>>>::value' was not satisfied [with _Alloc = std::vector<int, std::allocator<int>>]
        priority_queue(priority_queue&& __q, const _Alloc& __a)
        ^
/usr/bin/../lib/gcc/x86_64-linux-gnu/9/../../../../include/c++/9/bits/stl_queue.h:516:2: note: candidate constructor template not viable: requires single argument '__a', but 2 arguments were provided
        priority_queue(const _Alloc& __a)
        ^
/usr/bin/../lib/gcc/x86_64-linux-gnu/9/../../../../include/c++/9/bits/stl_queue.h:443:11: note: candidate constructor (the implicit copy constructor) not viable: requires 1 argument, but 2 were provided
    class priority_queue
          ^
/usr/bin/../lib/gcc/x86_64-linux-gnu/9/../../../../include/c++/9/bits/stl_queue.h:443:11: note: candidate constructor (the implicit move constructor) not viable: requires 1 argument, but 2 were provided
/usr/bin/../lib/gcc/x86_64-linux-gnu/9/../../../../include/c++/9/bits/stl_queue.h:526:2: note: candidate constructor template not viable: requires 3 arguments, but 2 were provided
        priority_queue(const _Compare& __x, const _Sequence& __c,
        ^
/usr/bin/../lib/gcc/x86_64-linux-gnu/9/../../../../include/c++/9/bits/stl_queue.h:532:2: note: candidate constructor template not viable: requires 3 arguments, but 2 were provided
        priority_queue(const _Compare& __x, _Sequence&& __c, const _Alloc& __a)
        ^
/usr/bin/../lib/gcc/x86_64-linux-gnu/9/../../../../include/c++/9/bits/stl_queue.h:501:2: note: candidate constructor template not viable: requires 0 arguments, but 2 were provided
        priority_queue()
        ^
/usr/bin/../lib/gcc/x86_64-linux-gnu/9/../../../../include/c++/9/bits/stl_queue.h:573:2: note: candidate constructor template not viable: requires 4 arguments, but 2 were provided
        priority_queue(_InputIterator __first, _InputIterator __last,
        ^
1 error generated.

我的解答思路和尝试过的方法

参考了这篇文章。结果可行。但写法与我想要的不同。
https://blog.csdn.net/weixin_36888577/article/details/79937886?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522164083380916780255210407%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=164083380916780255210407&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~top_positive~default-1-79937886.pc_search_insert_es_download_v2&utm_term=priority_queue&spm=1018.2226.3001.4187

我想要达到的结果

建立小根堆

  • 写回答

0条回答 默认 最新

    报告相同问题?

    问题事件

    • 系统已结题 1月7日
    • 创建了问题 12月30日

    悬赏问题

    • ¥15 手机接入宽带网线,如何释放宽带全部速度
    • ¥30 关于#r语言#的问题:如何对R语言中mfgarch包中构建的garch-midas模型进行样本内长期波动率预测和样本外长期波动率预测
    • ¥15 ETLCloud 处理json多层级问题
    • ¥15 matlab中使用gurobi时报错
    • ¥15 这个主板怎么能扩出一两个sata口
    • ¥15 不是,这到底错哪儿了😭
    • ¥15 2020长安杯与连接网探
    • ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么
    • ¥15 banner广告展示设置多少时间不怎么会消耗用户价值
    • ¥15 可见光定位matlab仿真