Mathieu Carbou on Wed, 07 Nov 2012 15:27:05 +0100


[Date Prev] [Date Next] [Thread Prev] [Thread Next] [Date Index] [Thread Index]

Re: sseraching in dynamic list


Hi,

Really thank you! It works fine. I reformated a little.

Mathieu.


On 06-Nov-2012 15:30, Max Alekseyev wrote:
> Mathieu,
> Please find my implementation of hashmap attached. I'd be glad you
> find it helpful.
> Regards,
> Max
>
> I've implemented hashmap
>
> On Sun, Nov 4, 2012 at 4:20 PM, Mathieu Carbou <mathieu.carbou@gmail.com> wrote:
>> Hello,
>>
>> I have a case where I need to put key-value items in a dynamic sorted
>> list and then search into:
>>
>> l=List()
>> listput([2,4])
>> listput([1,7])
>> listput([0,3])
>> listsort(l)
>> setsearch(l, ...)
>>
>> The issue is that only vecsearch takes a cmpf function, not setsearch.
>>
>> Is it possible to add it, or to indicate me a better way to do this  ?
>>
>> Actually I'd like to simulate a HashMap, where the key is unique and the
>> value can be anything. In my case, the sorting is not necessary, but
>> since PARI has no Map, I think I need to use the sort feature of lists
>> to be able to search back in them.
>>
>> Thank you.
>>
>> --
>>
>> Mathieu Carbou
>> Cell: 514-660-4287
>>
>>


-- 

Mathieu Carbou
Cell: 514-660-4287

Map() = [Set(),List()];

mapsearch(m,k) = setsearch(m[1],k);

mapput(m,k,v) =
{
    local(l, i=setsearch(m[1],k));
    if(i, m[2][i]=v; return(m));
    i=setsearch(m[1],k,1);
    if(i>#m[2], listput(m[2],v), listinsert(m[2],v,i));
    return([setunion(m[1],[k]), m[2]]);
}

mapget(m,k) =
{
    local(i=setsearch(m[1],k));
    if(i, return(m[2][i]));
    error("e_MAPGET");
}