Boost C++ Libraries of the most highly regarded and expertly designed C++ library projects in the world. Herb Sutter and Andrei Alexandrescu, C++ Coding Standards

This is the documentation for an old version of Boost. Click here to view this page for the latest version.


By definition a map is set of pairs. So we would expect maps to obey the same laws that are valid for sets. Yet the semantics of the icl's maps may be a different one, because of it's aggregating facilities, where the aggregating combiner operations are passed to combine the map's associated values. It turns out, that the aggregation on overlap principle induces semantic properties to icl maps in such a way, that the set of equations that are valid will depend on the semantics of the type CodomainT of the map's associated values.

This is less magical as it might seem at first glance. If, for instance, we instantiate an interval_map to collect and concatenate std::strings associated to intervals,

interval_map<int,std::string> cat_map;
cat_map += make_pair(interval<int>::rightopen(1,5),std::string("Hello"));
cat_map += make_pair(interval<int>::rightopen(3,7),std::string(" World"));
cout << "cat_map: " << cat_map << endl;

we won't be able to apply operator -=

// This will not compile because string::operator -= is missing.
cat_map -= make_pair(interval<int>::rightopen(3,7),std::string(" World"));

because, as std::sting does not implement -= itself, this won't compile. So all laws, that rely on operator -= or - not only will not be valid they can not even be stated. This reduces the set of laws that can be valid for a richer CodomainT type to a smaller set of laws and thus to a less restricted semantics.

Currently we have investigated and validated two major instantiations of icl::Maps,

both of which seem to have many interesting use cases for practical applications. The semantics associated with the term Numbers is a commutative monoid for unsigned numbers and a commutative or abelian group for signed numbers. From a practical point of view we can think of numbers as counting or quantifying the key values of the map.

Icl Maps of Sets or Collectors are models of concept Set. This implies that all laws that have been stated as a semantics for icl::Sets in the previous chapter also hold for Maps of Sets. Icl Maps of Numbers or Quantifiers on the contrary are not models of concept Set. But there is a substantial intersection of laws that apply both for Collectors and Quantifiers.

Kind of Map



Maps of Sets


Collects items for key values

Maps of Numbers


Counts or quantifies the key values

In the next two sections the law based semantics of Collectors and Quantifiers will be described in more detail.