c++ - 如何使用模板实现minheap

标签 c++ templates

我需要创建一个包含节点的最小堆模板。

我的问题是我不知道我是否也需要创建一个节点模板类,或者它是否应该作为一个结构包含在堆模板类中?

最佳答案

最小堆通常(从不?)使用显式节点实现——因为堆总是左填充(“完整”),因此具有定义明确的结构,这将是不必要的低效率,因为节点的处理和节点链接引入了相当多的开销,更不用说破坏引用的局部性,导致缓存未命中和性能不佳。

(当然最大堆也是一样。)

相反,它们是使用数组实现的。事实上,C++ 标准库已经包含函数 make_heappush_heappop_heap 来处理迭代器范围。将它们与 vector 结合使用,您就得到了堆。

关于c++ - 如何使用模板实现minheap,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3745194/

相关文章:

c++ - 带符号的 Char ATAN2 和 ATAN 近似值

c++ - 如何从 QGraphicsScene/QGraphicsView 创建图像文件?

c++ - 是否可以使用 C++ 模板函数来接受任何类型 T 的集合?

c++ - 模板和函数指针 : How do I define a function-pointer that was declared in a template class?

c++ - 如何确定 C++ 中实例化容器模板的容器模板类型

c++ - 如何将这个 While 循环写成 For 循环?

c++ - 包含自身实例化的模板,C++ 中的递归

c++ - 可以使用 C++ 模板来推迟对其参数的评估吗?

c++ - Lambda 作为模板参数

c++ - 为结构体灵活数组赋值