Thread overview
Multimap construct in DTL ?
May 05, 2004
C
May 05, 2004
Matthew
May 05, 2004
Kevin Bealer
May 05, 2004
Ben Hinkle
May 05, 2004
Ben Hinkle
May 05, 2004
C
May 05, 2004
Is this planned ?

When can we expect DTL in the distro ?

Thanks,
Charles
May 05, 2004
"C" <qbert@atari-soldiers.com> wrote in message news:opr7iej8g8aoygh6@news.digitalmars.com...
> Is this planned ?

I don't plan to write a multi-map, but I do plan to be able to advise/help anyone who wishes to contribute one.

You see, my intention is that the stuff in DTL can be contributed by many people, as long as it's efficient+robust+flexible+etc.etc.

I'm hoping that once we get the first version - which is still some way away because I'm waiting for a "method-hidable" mixins from Walter, and he's understandably wrestling with some serious design/implementation issues on it -

> When can we expect DTL in the distro ?

I don't know whether we can ever _expect_ it, <G>, but I hope to release something very soon. See the other post. As to when/if it gets into Phobos, that's down to all you to share your opinions, and big-W to give the yeah or nay. Assuming it's not embarrassingly bad, I would expect it to enter the Martian gravitational pull this month.



May 05, 2004
Have you tried using an assoc array of dynamic arrays? I'd be curious to see how that performs. It would probably be pretty fast in the cases when the map only has a few duplicates per key. If there are lots of duplicates and you remove often then something that doesn't use dynamic arrays would probably be better.

For example, a multi-map where the keys are strings and the values are ints
would look like
  int[][char[]] map;
  map["hello"] ~= 10;
  map["world"] ~= 20;
  map["hello"] ~= 30;
  printf("number of unique keys: %d\n", map.length);
  printf("number of duplicates of hello: %d\n", map["hello"].length);
  foreach(char[] key; map.keys) {
    foreach(int val; map[key])
     printf(" %.*s: %d\n",key,val);
  }
  delete map["world"]; // remove all values for key "world"

A few helper functions to delete individual items or count up the total number of items in the array would probably be nice, too.


May 05, 2004
> If there are lots of duplicates and
> you remove often then something that doesn't use dynamic arrays would
> probably be better.

actually if you have lots of duplicates for a key an assoc array of assoc arrays would probably be fine:

  void[int][char[]] map2; // multi-map of ints indexed by strings
  map2["hello"][10];
  map2["world"][20];
  map2["hello"][30];
  printf("number of unique keys: %d\n", map2.length);
  printf("number of duplicates of hello: %d\n", map2["hello"].length);
  foreach(char[] key; map2.keys) {
    foreach(int val; map2[key].keys)
     printf(" %.*s: %d\n",key,val);
  }
  delete map2["world"]; // remove all values for key "world"
  delete map2["hello"][30]; // remove entry 30 for key "world"
  printf("number of duplicates of hello after deletion: %d\n",
map2["hello"].length);


May 05, 2004
Hmm good call, ill try this thanks.

C

On Wed, 5 May 2004 10:54:10 -0400, Ben Hinkle <bhinkle4@juno.com> wrote:

> Have you tried using an assoc array of dynamic arrays? I'd be curious to see
> how that performs. It would probably be pretty fast in the cases when the
> map only has a few duplicates per key. If there are lots of duplicates and
> you remove often then something that doesn't use dynamic arrays would
> probably be better.
>
> For example, a multi-map where the keys are strings and the values are ints
> would look like
>   int[][char[]] map;
>   map["hello"] ~= 10;
>   map["world"] ~= 20;
>   map["hello"] ~= 30;
>   printf("number of unique keys: %d\n", map.length);
>   printf("number of duplicates of hello: %d\n", map["hello"].length);
>   foreach(char[] key; map.keys) {
>     foreach(int val; map[key])
>      printf(" %.*s: %d\n",key,val);
>   }
>   delete map["world"]; // remove all values for key "world"
>
> A few helper functions to delete individual items or count up the total
> number of items in the array would probably be nice, too.
>
>
May 05, 2004
If I wanted a multi-map from string to string, I could use a map-to-list:

char[][][char[]] multi;

What additional functionality would I need for a true multimap?

Kevin


In article <c79qqd$2k4r$2@digitaldaemon.com>, Matthew says...
>
>
>"C" <qbert@atari-soldiers.com> wrote in message news:opr7iej8g8aoygh6@news.digitalmars.com...
>> Is this planned ?
>
>I don't plan to write a multi-map, but I do plan to be able to advise/help anyone who wishes to contribute one.
>
>You see, my intention is that the stuff in DTL can be contributed by many people, as long as it's efficient+robust+flexible+etc.etc.
>
>I'm hoping that once we get the first version - which is still some way away because I'm waiting for a "method-hidable" mixins from Walter, and he's understandably wrestling with some serious design/implementation issues on it -
>
>> When can we expect DTL in the distro ?
>
>I don't know whether we can ever _expect_ it, <G>, but I hope to release something very soon. See the other post. As to when/if it gets into Phobos, that's down to all you to share your opinions, and big-W to give the yeah or nay. Assuming it's not embarrassingly bad, I would expect it to enter the Martian gravitational pull this month.
>
>
>