Quick Links:

bal | bbl | bdl | bsl

Component bslh_hashtuple
[Package bslh]

Provide hashAppend for std::tuple. More...

Outline
Purpose:
Provide hashAppend for std::tuple.
Description:
This component provides a free function template, bslh::hashAppend, overloaded for the std::tuple class template. Including this function allows for std::tuple types (and types that contain them) to be used as keys in BDE hashed containers.
Note that use of this component requires that the language standard be 2011 or later, as that is when std::tuple first appears.
Usage:
This section illustrates intended usage of this component.
Example 1: Hashing a Tuple of Integer Values:
Suppose one must compute has that combines the hashes of several integer values, each of a different type:
  char  c = 'a';
  short s = static_cast<short>(1);
  int   i = 2;
  long  l = 3L;
First, we can make that calculation by repeated invocations of a 'bslhDefaultHashAlogorithm object:
  bslh::DefaultHashAlgorithm hasherS;
  hasherS(&c, sizeof(char));
  hasherS(&s, sizeof(short));
  hasherS(&i, sizeof(int));
  hasherS(&l, sizeof(long));

 bslh::DefaultHashAlgorithm::result_type hashS = hasherS.computeHash();
Now, the same calculation can be expressed more concisely if those same values are contained in a single std::tuple object.
  std::tuple<char, short, int, long> t = std::make_tuple(c, s, i, l);

  bslh::DefaultHashAlgorithm hasherT;
  bslh::hashAppend(hasherT, t);

  bslh::DefaultHashAlgorithm::result_type hashT = hasherT.computeHash();
Finally, we confirm that we computed the same result.
  assert(hashS == hashT);