默认情况下,C++中的std::priority_queue为max_heap。C++中的min_heap是将其Compare重写为std::greater的priority_queue。
我想让一个函数从一个队列中提取元素,将其推送到另一个队列中。根据某些情况,可能是从min_heap到max_heap,或者反过来。因为它是一个泛型操作,所以我编写了一个函数,其参数为:
void some_operation(priority_queue<T>& give, priority_queue<T>& take)但是,因为max_heap和min_heap是用不同的比较实例化的,所以它们的类类型是不同的,我的计划不起作用。
对此有什么好的/优雅的解决方案吗?
(我认为这个问题在模板类中更普遍,在模板类中,类型的实例化略有不同,但本质基本相同?)
发布于 2019-05-17 21:21:11
std::priority_queue是一个模板,不是一个类。你不能在没有指定所有模板参数的情况下“引用它”(但是每个唯一的参数组合将产生一个完全不同的类,也就是Ak.a。模板实例化)。
为了解决这个问题,你也可以模板化你的函数:
template <typename A, typename B>
void some_operation(A& give, B& take) ...您可以稍后使用SFINAE将A和B进一步限制为容器类型,这样在使用不合适的类型调用函数的情况下,您将获得(可以说)更好的错误消息。
https://stackoverflow.com/questions/56184918
复制相似问题