From mboxrd@z Thu Jan 1 00:00:00 1970 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on polar.synack.me X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham autolearn_force=no version=3.4.4 X-Google-Thread: 103376,76e8d825615718a X-Google-NewGroupId: yes X-Google-Attributes: gida07f3367d7,domainid0,public,usenet X-Google-Language: ENGLISH,ASCII-7-bit Path: g2news1.google.com!news1.google.com!npeer01.iad.highwinds-media.com!news.highwinds-media.com!feed-me.highwinds-media.com!nntp.club.cc.cmu.edu!feeder.erje.net!eternal-september.org!news.eternal-september.org!.POSTED!not-for-mail From: Simon Wright Newsgroups: comp.lang.ada Subject: Re: Ada.Containers Hash function for a set of small integers Date: Fri, 23 Apr 2010 22:39:52 +0100 Organization: A noiseless patient Spider Message-ID: References: <50701baa-7c05-450c-a42d-c699516ddc00@t14g2000prm.googlegroups.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Injection-Date: Fri, 23 Apr 2010 21:39:53 +0000 (UTC) Injection-Info: feeder.eternal-september.org; posting-host="KCXegvZb5vh43D+f3BR6Ew"; logging-data="23427"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX19Y2DdTcyOxtUPCXHktVIttv3OjezSGU8M=" User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/23.1 (darwin) Cancel-Lock: sha1:EKWG7qBYImf9kfdHX/AggQvgxNs= sha1:A0+/KGwnp0fLR9sF6R0hMvoBILU= Xref: g2news1.google.com comp.lang.ada:10174 Date: 2010-04-23T22:39:52+01:00 List-Id: Michael R writes: > Hi Folks, > > I'd like to use the generic Hashed_Maps container to store mappings > from a set of small integers (three) to Wide_Strings > (Indefinite_Hashed_Maps): > > (1, 10, 4) => "ABC", > (10, 3, 5) => "XYZ", > > Does anyone have recommendations on how best to implement the Hash > function for keys like this? I don't know about 'best', but in ColdFrame (http://coldframe.sourceforge.net/coldframe/) I would generate this hash for use with Booch Maps, where the key components of Instance are {A:Integer, B:Integer, C:Integer}: function Instance_Hash (I : Instance) return Natural is type M is mod 2**31; Result : M := 0; begin Result := Result xor M (I.A mod 2**31); Result := Result * 10019; Result := Result xor M (I.B mod 2**31); Result := Result * 10019; Result := Result xor M (I.C mod 2**31); Result := Result * 10019; return Natural (Result); end Instance_Hash; I believe the 10019 came from Knuth, but can't see a reference.