////
Copyright 2005-2008 Daniel James
Copyright 2022 Christian Mazakas
Copyright 2022 Peter Dimov
Distributed under the Boost Software License, Version 1.0.
https://www.boost.org/LICENSE_1_0.txt
////

[#links]
= Links
:idprefix: links_

*A Proposal to Add Hash Tables to the Standard Library* +
http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2003/n1456.html

The hash table proposal explains much of the design. The hash function object is discussed in Section D.

---

*The {cpp} Standard Library Technical Report* +
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1836.pdf

Contains the hash function specification in section 6.3.2.

---

*Library Extension Technical Report Issues List* +
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1837.pdf

The library implements the extension described in Issue 6.18, pages 63-67.

---

*Methods for Identifying Versioned and Plagiarised Documents* +
_Timothy C. Hoad, Justin Zobel_ +
https://people.eng.unimelb.edu.au/jzobel/fulltext/jasist03thz.pdf

Contains the hash function that the initial implementation of `boost::hash_combine` was based on.

---

*Performance in Practice of String Hashing Functions* +
_M.V. Ramakrishna, J. Zobel_ +
In Proc. Int. Conf. on Database Systems for Advanced Applications, pages 215-223, Melbourne, Australia, April 1997. +
https://www.comp.nus.edu.sg/~lingtw/dasfaa_proceedings/DASFAA97/P215.pdf

Referenced in the above paper as the source of the hash function.

---

*MurmurHash3 hash function source* +
_Austin Appleby_ +
https://github.com/aappleby/smhasher/blob/61a0530f28277f2e850bfc39600ce61d02b518de/src/MurmurHash3.cpp#L65-L90

Austin Appleby's 32 and 64 bit finalization mixing functions that
introduced the "xmxmx" general form of a high quality bijective
transformation that approximates a random permutation.

---

*SMHasher hash function test suite* +
_Austin Appleby_ +
https://github.com/aappleby/smhasher

Contains a battery of tests for evaluating hash functions. The current
64 bit implementation of `boost::hash` for strings passes SMHasher.
Previous iterations did not.

---

*Better Bit Mixing - Improving on MurmurHash3's 64-bit Finalizer* +
_David Stafford_ +
https://zimbry.blogspot.com/2011/09/better-bit-mixing-improving-on.html

Describes the so-called "variant 13" mixing function, an improvement
over `fmix64` from MurmurHash3, made famous by its adoption by the
`splitmix64` http://xorshift.di.unimi.it/splitmix64.c[random number generator].

---

*Stronger, better, morer, Moremur; a better Murmur3-type mixer* +
_Pelle Evensen_ +
https://mostlymangling.blogspot.com/2019/12/stronger-better-morer-moremur-better.html

Describes Moremur, an improvement over MurmurHash3 `fmix64` and Stafford
"variant 13".

---

*Improved mx3 and the RRC test* +
_Jon Maiga_ +
http://jonkagstrom.com/mx3/mx3_rev2.html

Contains another improvement over MurmurHash3 `fmix64` and "variant 13". This
is what the current implementation of `boost::hash_combine` uses when
`std::size_t` is 64 bits.

---

*Prospecting for Hash Functions* +
_Chris Wellons_ +
https://nullprogram.com/blog/2018/07/31/

Describes https://github.com/skeeto/hash-prospector[Hash Prospector],
a utility for discovering and evaluating mixing functions.

---

*New best known functions* +
_"TheIronBorn"_ +
https://github.com/skeeto/hash-prospector/issues/19

Describes a good 32 bit mixing function, used by the current implementation
of `boost::hash_combine` when `std::size_t` is 32 bits.
