Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
Разработка программного обеспечения

Collectors: Maps of Sets

Boost , Chapter 1. Boost.Icl , Semantics

Boost C++ Libraries

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

PrevUpHomeNext

Icl Collectors, behave like Sets. This can be understood easily, if we consider, that every map of sets can be transformed to an equivalent set of pairs. For instance in the pseudocode below map m

icl::map<int,set<int> >  m = {(1->{1,2}), (2->{1})};

is equivalent to set s

icl::set<pair<int,int> > s = {(1,1),(1,2),   //representing 1->{1,2}
                              (2,1)       }; //representing 2->{1}

Также результаты добавления, вычитания и других операций на map m и set s сохраняет эквивалентность контейнеров почти<218>:

m += (1,3);
m == {(1->{1,2,3}), (2->{1})}; //aggregated on collision of key value 1
s += (1,3);
s == {(1,1),(1,2),(1,3),   //representing 1->{1,2,3}
      (2,1)             }; //representing 2->{1}

Эквивалентность m и s нарушается только в том случае, если пустой набор происходит в m путем вычитания пары значений:

m -= (2,1);
m == {(1->{1,2,3}), (2->{})}; //aggregated on collision of key value 2
s -= (2,1);
s == {(1,1),(1,2),(1,3)   //representing 1->{1,2,3}
                       }; //2->{} is not represented in s

Эту проблему можно решить двумя способами.

  1. Удаление пар значений образует Коллектора, если это связанное значение становится нейтральным значением или identity_element.
  2. Используя другое равенство, называемое отдельным равенством в законах для проверки. Различное равенство означает только ценностные пары, которые несут ценности, не равные identity_element.

Решение (1) привело к появлению особенностей карты, в частности, trait partial_absorber, что является параметром по умолчанию во всех шаблонах карты icl.

Решение (2), применяется для проверки семантики icl::Maps для частичного_enricher черта, которая не удаляет пары значений, которые несут элементы идентичности. Различное равенство осуществляется функцией нечлена, называемой is_distinct_equal. На протяжении всей этой главы отдельное равенство в псевдокоде и правовых денотациях обозначается как =d= оператор.

Действительность сводов законов, составляющих Set семантика, теперь должна быть вполне очевидной. >1>> >1>>>1>>>2>>>>>2>2>>2>>2>>2>>2>>2>>2>2>>2>>2>2>2>>2>2>2>2>>2>2>2>>2>2>2>>>2>2>2>>.

Laws on set union, set intersection and set difference

Associativity<C,+,== >: C a,b,c; a+(b+c) == (a+b)+c
Neutrality<C,+,== >   : C a;       a+C() == a
Commutativity<C,+,== >: C a,b;       a+b == b+a
Associativity<C,&,== >: C a,b,c; a&(b&c) ==(a&b)&c
Commutativity<C,&,== >: C a,b;       a&b == b&a
RightNeutrality<C,-,== >: C a;   a-C() ==  a
Inversion<C,-,=v= >     : C a;   a - a =v= C()

Все фундаментальные законы могут быть подтверждены для всех icl Maps в их моментации как Maps of Sets или Collectors. Как и ожидалось, инверсия удерживает только определенное равенство, если карта не является partial_absorber.

                             +    &    -
Associativity                ==   ==
Neutrality                   ==        ==
Commutativity                ==   ==
Inversion partial_absorber             ==
          partial_enricher             =d=

Distributivity Laws

     Distributivity<C,+,&,=v= > : C a,b,c; a + (b & c) =v= (a + b) & (a + c)
     Distributivity<C,&,+,=v= > : C a,b,c; a & (b + c) =v= (a & b) + (a & c)
RightDistributivity<C,+,-,=v= > : C a,b,c; (a + b) - c =v= (a - c) + (b - c)
RightDistributivity<C,&,-,=v= > : C a,b,c; (a & b) - c =v= (a - c) & (b - c)

>>>>>>>>a>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>.

                                                   +,&    &,+
     Distributivity  joining                       ==     ==
                     splitting   partial_absorber  =e=    =e=
                                 partial_enricher  =e=    ==
                                                   +,-    &,-
RightDistributivity  joining                       ==     ==
                     splitting                     =e=    ==

DeMorgan's Law and Symmetric Difference

DeMorgan<C,+,&,=v= > : C a,b,c; a - (b + c) =v= (a - b) & (a - c)
DeMorgan<C,&,+,=v= > : C a,b,c; a - (b & c) =v= (a - b) + (a - c)

                         +,&     &,+
DeMorgan  joining        ==      ==
          splitting      ==      =e=

SymmetricDifference<C,== > : C a,b,c; (a + b) - (a * b) == (a - b) + (b - a)

Обзор приведенных выше таблиц действительности показывает, что наборы действительных законов для icl Sets и icl Maps Sets, которые являются поглощение идентичности, точно такие же. Как и ожидалось, только для Maps of Sets, которые представляют пустые наборы как связанные значения, называемые обогатители идентичностей, существуют маргинальные семантические различия.


PrevUpHomeNext

Статья Collectors: Maps of Sets раздела Chapter 1. Boost.Icl Semantics может быть полезна для разработчиков на c++ и boost.




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.



:: Главная :: Semantics ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-08-30 11:47:00
2025-05-19 20:43:07/0.0074079036712646/0