《C++ Primer》11.3. Operations on Associative Containers
Finding Elements in a multimap or multiset
Finding an element in an associate container that requires unique keys is a simple matter—the element is or not in the container. For the containers that allow multiple keys, the process is more complicated: There may be many elements with the given key. When a multimap or multiset has multiple elements of a given key, those elements will be adjacent within the container.
A Different, Iterator-Oriented Solution
Alternatively, we can solve our problem using lower_bound and upper_bound. Each of those operations take a key and returns a iterator.
If the key is in the container,
the iterator returned from lower_bound will refer to the first instance of that key and
the iterator returned by upper_bound will refer just after the last instance of the key.
If the element in not int the multimap, then
lower_bound and upper_bound will return equal iterators; both will refer to the point at which the key can be inserted without disrupting the order.
Thus, calling lower_bound and upper_bound on the same key yields an iterator range that denotes all the elements with that key.