On Saturday, 22 June 2013 at 07:48:25 UTC, qznc wrote:
On Monday, 14 November 2011 at 06:15:18 UTC, SimonM wrote:
On 2011/11/14 02:10 AM, bearophile wrote:
SimonM:

2009, 27 April:
http://www.digitalmars.com/d/archives/digitalmars/D/std.algorithm.BinaryHeap_88811.html

See the working version:
http://rosettacode.org/wiki/Huffman_coding#D

Bye,
bearophile

Okay, I looked at the example, and it seems that the only reason it works is because that piece of code never requires the array's length to grow larger than it's initial length (at the start of the loop, 2 elements are taken out, and at the end, only one is inserted back in).

If I try using a BinaryHeap with a range, then, like the documentation mentions, I can't grow that BinaryHeap any larger than it's initial size, because I got the following error: "Cannot grow a heap created over a range". But somehow I can't get it working with an Array!(T) like the documentation implies it should be capable of?

Is this problem resolved? I cannot produce a growable BinaryHeap myself.

Ok, got it. Instead of using a dynamic array directly, wrapping it into a std.container.Array works.

import std.container: Array, heapify;

Foo[] arr = ...;
auto wrapped = Array!Foo(arr);
auto queue = heapify(wrapped);

In general, other containers should work as well, since containers provide an insertBack method whereas the builtin arrays/ranges do not.

Reply via email to