首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >交替使用max_heap和min_heap

交替使用max_heap和min_heap
EN

Stack Overflow用户
提问于 2019-05-17 18:50:18
回答 1查看 33关注 0票数 0

默认情况下,C++中的std::priority_queuemax_heap。C++中的min_heap是将其Compare重写为std::greaterpriority_queue

我想让一个函数从一个队列中提取元素,将其推送到另一个队列中。根据某些情况,可能是从min_heapmax_heap,或者反过来。因为它是一个泛型操作,所以我编写了一个函数,其参数为:

代码语言:javascript
复制
void some_operation(priority_queue<T>& give, priority_queue<T>& take)

但是,因为max_heap和min_heap是用不同的比较实例化的,所以它们的类类型是不同的,我的计划不起作用。

对此有什么好的/优雅的解决方案吗?

(我认为这个问题在模板类中更普遍,在模板类中,类型的实例化略有不同,但本质基本相同?)

EN

回答 1

Stack Overflow用户

发布于 2019-05-17 21:21:11

std::priority_queue是一个模板,不是一个类。你不能在没有指定所有模板参数的情况下“引用它”(但是每个唯一的参数组合将产生一个完全不同的类,也就是Ak.a。模板实例化)。

为了解决这个问题,你也可以模板化你的函数:

代码语言:javascript
复制
template <typename A, typename B>
void some_operation(A& give, B& take) ...

您可以稍后使用SFINAE将A和B进一步限制为容器类型,这样在使用不合适的类型调用函数的情况下,您将获得(可以说)更好的错误消息。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56184918

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档