交替使用max_heap和min_heap

时间:2019-05-17 10:50:18

标签: c++

默认情况下,C ++中的

std::priority_queuemax_heap。 C ++中的min_heap是一个priority_queue,其Compare被覆盖为std::greater

我想要一个函数从一个队列中提取元素以将其推送到另一个队列。根据某些条件,可能是从min_heapmax_heap,或者反过来。因为这是一个通用操作,所以我编写了一个函数:

void some_operation(priority_queue<T>& give, priority_queue<T>& take)

但是,因为max_heap和min_heap是使用不同的Compare实例化的,所以它们的类类型不同,因此我的计划无法正常工作。

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

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

1 个答案:

答案 0 :(得分:0)

std::priority_queue是模板,而不是类。您必须在未指定其所有模板参数的情况下“通过引用获取它”(但每个参数的唯一组合都将产生一个完全不同的类,也就是模板实例化)。

要解决此问题,您还可以使功能模板化:

template <typename A, typename B>
void some_operation(A& give, B& take) ...

您以后可以进一步将A和B限制为例如使用SFINAE的容器类型,这样,如果使用不合适的类型调用该函数,您会得到(可以说)更好的错误消息。

相关问题