2014-02-25 24 views
0

我試圖對我的自定義容器進行自定義(而不是使用STL之一)堆排序方法。我有迭代器,但是我找不到make_heap算法的描述。據我瞭解,它做的事情就像安排元素,使它們看起來像一個二進制堆,每個父節點旁邊有兩個孩子,但是孩子的孩子呢?它究竟如何安排?基於迭代器的自定義堆積函數

回答

1

調用std::make_heap後元素的順序是實現定義的。唯一指定的是最大的元素首先放在範圍內。

我認爲在最常見的實現中,如果一個節點存儲在索引i處,則其左側子節點存儲在2*i+1及其右側子節點2*i+2處。

+0

似乎用迭代器很難做到,大多數算法都是基於帶有索引的遞歸函數。我認爲,如果我可以創建基於迭代器的GetLeftChild,GetRightChild和GetParent,其餘部分將很簡單。但是乘以一個迭代器不會給我任何明智的。你能提出一個迭代器類似的操作嗎? –

+0

你是什麼意思?爲什麼你不能只是'std :: make_heap(b,e)'其中'b'是迭代器到範圍的開始,'e'到結束? – Brian

+0

@shortage_radeon對於RandomAccessIterators,你可以減去它們(或使用'std :: distance')並向它們添加整數,就像你可以使用指針一樣。 – dyp