hash_compare Class

The template class describes an object that can be used by any of the hash associative containers — hash_map, hash_multimap, hash_set, or hash_multiset — as a default Traits parameter object to order and hash the elements they contain.

template<class Key, class Traits = less<Key> >
   class hash_compare
   Traits comp;
   const size_t bucket_size = 4;
   const size_t min_buckets = 8;
   hash_compare( );
   hash_compare( Traits pred );
   size_t operator( )( const Key& _Key ) const;
   bool operator( )( 
      const Key& _Key1,
      const Key& _Key2
   ) const;

Each hash associative container stores a hash traits object of type Traits (a template parameter). You can derive a class from a specialization of hash_compare to selectively override certain functions and objects, or you can supply your own version of this class if you meet certain minimum requirements. Specifically, for an object hash_comp of type hash_compare<Key, Traits>, the following behavior is required by the above containers:

  • For all values _Key of type Key, the call hash_comp(_Key) serves as a hash function, which yields a distribution of values of type size_t. The function supplied by hash_compare returns _Key.

  • For any value _Key1 of type Key that precedes _Key2 in the sequence and has the same hash value (value returned by the hash function), hash_comp(_Key2, _Key1) is false. The function must impose a total ordering on values of type Key. The function supplied by hash_compare returns comp(_Key2, _Key1), where comp is a stored object of type Traits that you can specify when you construct the object hash_comp. For the default Traits parameter type less<Key>, sort keys never decrease in value.

  • The integer constant bucket_size specifies the mean number of elements per "bucket" (hash-table entry) that the container should try not to exceed. It must be greater than zero. The value supplied by hash_compare is 4.

  • The integer constant min_buckets specifies the minimum number of buckets to maintain in the hash table. It must be a power of two and greater than zero. The value supplied by hash_compare is 8.

In Visual C++ .NET 2003, members of the <hash_map> and <hash_set> header files are no longer in the std namespace, but rather have been moved into the stdext namespace. See The stdext Namespace for more information.

See examples for hash_map::hash_map, hash_multimap::hash_multimap, hash_set::hash_set, and hash_multiset::hash_multiset, for examples of how to declare and use hash_compare.

Header: <hash_map>

Namespace: stdext

Community Additions