associative arrays: iteration is finally here

Andrei Alexandrescu SeeWebsiteForEmail at erdani.org
Wed Oct 28 18:29:05 PDT 2009


Denis Koroskin wrote:
> On Thu, 29 Oct 2009 03:08:34 +0300, Andrei Alexandrescu 
> <SeeWebsiteForEmail at erdani.org> wrote:
> 
>> Denis Koroskin wrote:
>>> On Wed, 28 Oct 2009 23:18:08 +0300, Andrei Alexandrescu 
>>> <SeeWebsiteForEmail at erdani.org> wrote:
>>>
>>>>> I'd also like you to add a few things in an AA interface.
>>>>>  First, opIn should not return a pointer to Value, but a pointer to 
>>>>> a pair of Key and Value, if possible (i.e. if this change won't 
>>>>> sacrifice performance).
>>>>
>>>> I'm coy about adding that because it forces the implementation to 
>>>> hold keys and values next to each other. I think that was a minor 
>>>> mistake of STL - there's too much exposure of layout details.
>>>>
>>>  It doesn't have to be the case: key and value are both properties 
>>> (i.e. methods), and they doesn't have to be located next to each other.
>>
>> I see. So you want a pointer to an elaborate type featuring a key and 
>> a value.
>>
>>>>> Second, AA.remove method should accept result of opIn operation to 
>>>>> avoid an additional lookup for removal:
>>>>>  if (auto value = key in aa) {
>>>>>     aa.remove(key); // an unnecessary lookup
>>>>> }
>>>>
>>>> I'll make aa.remove(key) always work and return a bool that tells 
>>>> you whether there was a mapping or not.
>>>>
>>>  Err... How does it solve the double lookup problem?
>>
>> Your test looks something up and then removes it.
>>
>>
>> Andrei
> 
> Well, my extended test case looks something up, manipulates the found 
> value, and then possibly removes it.

Ok, I understand your points, thanks for explaining.

Andrei



More information about the Digitalmars-d mailing list