On 30 Sep 2009, at 16:16, Andrew C. Smith wrote:
But with this, you can't easily return the contents (which in this case is the list of names, not the "contents" in the normal sense) of the associative arrays.
Robert did not tell if he wanted lookup table or something like C++ std::set, which just stores the elements.
If you can iterate, deleting is pretty easy. The problem there is just that everything has to be re-sorted. Without easy pointers, it's much more difficult to insert something into a sorted list, but luckily an array is basically just a series of pointers (right?).
An array in C is a contiguous memory chunk, at least address wise. In C ++, std::vector is such a chunk which can dynamically reallocated. A hash map typically has such an array, where each entry is a singly linked list. It average speed is proportional to the average depth of the lists.
If you had a sortable list (like note numbers of a chord or something) then you could drop the search function into the middle and get to your destination quite a bit faster. If you wanted to hack the array class to create .insert() and .remove() methods (where .remove() keeps the order without any null pointers) then please, do share. It could probably be done in ChucK sans-hacking, but where's the fun in that?
A check check in the source codes suggested chuck is using std::map for the associative array part. Then it is just to export to the chuck language iterator type and functions begin(), end(). The syntax might be something like: int m[0]; 1 => m["a"]; 2 => m["b"]; ... for (m.begin => iterator i; i < m.end(); i++) <<< m[i] >>>; One problem here is the type qualification of i: in C++, one would have to give it as a type belonging to the class, like std::map::iterator.
What is the difference exactly between .cap() and .size() ?
Don't know. I just needed array size, and started using size() :-). Hans