По определению карта представляет собой набор пар. Поэтому мы ожидаем, что карты будут подчиняться тем же законам, что и наборы. Тем не менее, семантика картiclможет быть другой из-за агрегирования объектов, где операции агрегирования комбинатора передаются для объединения связанных значений карты. Получается, что агрегация по принципу перекрытия индуцирует семантические свойства к картам icl таким образом, что набор действительных уравнений будет зависеть от семантики типа<CodomainT
>связанных с картой значений.
Это менее волшебно, чем может показаться на первый взгляд. Если, например, мы инстанцируем<interval_map
>для сбора и консигнации<std::strings
>, связанных с интервалами,
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
-=
cat_map -= make_pair(interval<int>::rightopen(3,7),std::string(" World"));
Потому что, как std::sting не реализует себя<-=
>, это не компилируется. Так что все законы, которые опираются на<operator-=
>или<-
>, не только не будут действительны, они даже не могут быть заявлены. Это сводит набор законов, которые могут быть действительны для более богатого<CodomainT
>типа, к меньшему набору законов и, следовательно, к менее ограниченной семантике.
В настоящее время мы исследовали и подтвердили два основных вывода icl:
- Карты наборов, которые будут называтьсяКоллекционерыи
- Карты чисел, которые будут называтьсяКвантификаторы
Оба, кажется, имеют много интересных вариантов использования для практического применения. Семантика, связанная с терминомЧисла— этокоммутативный моноиддля неподписанных чисел икоммутативная или абелевая группадля подписанных чисел. С практической точки зрения мы можем рассматривать числа как подсчет или количественную оценку ключевых значений карты.
IclКарты наборовилиКоллекционерыявляются моделями концепции<Set
>. Это означает, что все законы, изложенные как семантика для<icl::Sets
>в предыдущей главе, также держатся для<Maps
ofSets
>.Карты чиселилиКвантификаторы, напротив, не являются моделями понятия<Set
>. Но есть существенное пересечение законов, которые применяются как для<Collectors
>, так и<Quantifiers
>.
В следующих двух разделах закон основывает семантикуКоллекционерови.Квантификаторыбудут описаны более подробно.