associative arrays: iteration is finally here

Denis Koroskin 2korden at gmail.com
Wed Oct 28 17:14:01 PDT 2009


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.



More information about the Digitalmars-d mailing list