BDE 4.14.0 Production release
Loading...
Searching...
No Matches
bdlb_caselessstringviewhash

Detailed Description

Outline

Purpose

Provide a case-insensitive hash functor for string views.

Classes

See also
bdlb_caselessstringviewequalto, bdlb_caselessstringviewless

Description

This component provides a struct, bdlb::CaselessStringViewHash, that defines a functor to generate a case-insensitivee hash code for a string view. This hash functor is suitable for supporting bsl::strings and bsl::string_views as keys in unordered associative containers.

Note that using this component to hash keys into a container and then using the bdlb_caselessstringviewequalto component to compare them is less efficient than converting all the keys to the same case prior to insertion and then just doing straight hashes and string compares.

Usage

This section illustrates intended use of this component.

Example 1: Basic Use of bdlb::CaselessStringViewHash:

Suppose we need an associative container to store, for any stock name, the number of shares of that stock we own:

typedef bsl::unordered_map<bsl::string, int> SecuritiesOwnedCS;
// case sensitive
int,
SecuritiesOwnedCI;
// case insensitive
Definition bslstl_unorderedmap.h:1089
basic_string< char > string
Definition bslstl_string.h:782
Definition bdlb_caselessstringviewequalto.h:115
Definition bdlb_caselessstringviewhash.h:170

This type of container stores quantities of shares and allows access to them by their names, in a case-insensitive manner.

First, we create a container for securities holdings, case-sensitive, and fill it:

SecuritiesOwnedCS securitiesOwnedCS;
securitiesOwnedCS["IBM"] = 616;
securitiesOwnedCS["Microsoft"] = 6160000;
assert(2 == securitiesOwnedCS.size());

Then, we create a container for securities holdings, case-insensitive, and fill it:

SecuritiesOwnedCI securitiesOwnedCI;
securitiesOwnedCI["IBM"] = 616;
securitiesOwnedCI["Microsoft"] = 6160000;
assert(2 == securitiesOwnedCI.size());

Now, we try accessing the case-sensitive securitiesc:

assert(1 == securitiesOwnedCS.count("IBM"));
assert(616 == securitiesOwnedCS[ "IBM"]);
assert(0 == securitiesOwnedCS.count("ibm"));
assert(0 == securitiesOwnedCS.count("Ibm"));
assert(0 == securitiesOwnedCS.count("iBm"));
assert(1 == securitiesOwnedCS.count("Microsoft"));
assert(6160000 == securitiesOwnedCS[ "Microsoft"]);
assert(0 == securitiesOwnedCS.count("MICROSOFT"));
assert(0 == securitiesOwnedCS.count("microsoft"));
assert(0 == securitiesOwnedCS.count("MICROSOFT"));
assert(0 == securitiesOwnedCS.count("Google"));

Finally, we access the case-insensitive securitiesci:

assert(1 == securitiesOwnedCI.count("IBM"));
assert(616 == securitiesOwnedCI[ "IBM"]);
assert(1 == securitiesOwnedCI.count("ibm"));
assert(616 == securitiesOwnedCI[ "ibm"]);
assert(1 == securitiesOwnedCI.count("Ibm"));
assert(616 == securitiesOwnedCI[ "Ibm"]);
assert(1 == securitiesOwnedCI.count("iBm"));
assert(616 == securitiesOwnedCI[ "iBm"]);
assert(1 == securitiesOwnedCI.count("Microsoft"));
assert(6160000 == securitiesOwnedCI[ "Microsoft"]);
assert(1 == securitiesOwnedCI.count("MICROSOFT"));
assert(6160000 == securitiesOwnedCI[ "MICROSOFT"]);
assert(1 == securitiesOwnedCI.count("microsoft"));
assert(6160000 == securitiesOwnedCI[ "microsoft"]);
assert(1 == securitiesOwnedCI.count("MICROSOFT"));
assert(6160000 == securitiesOwnedCI[ "MICROSOFT"]);
assert(0 == securitiesOwnedCI.count("Google"));