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

Intersection

Boost , Chapter 1. Boost.Icl , Function Reference

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

Пересечение

интервал
Тип

интервал
Наборы

интервал
Карты

элемент
Наборы

элемент
Карты

voidadd_intersectionT&constT&constP&

ei

eiSbpM

T&оператор&=T&,constP&]

ei

eiSbpM

e

b

Tоператор&T,constP&]
Tоператор&constP&,T]

i

ei

eiSbpM

e

b

боолпересекаетсяConst&,ConstP&]
boolразъединяетConstConstP&]

i

ei

eiSbpM

e

b

Функции и операторы, связанные спересечениемнаобъектах icl, приведены в таблице выше.

Описание пересечения

Наборы

Пересечение на наборах реализуетустановленное пересечение

Карты

Пересечение на Картах реализует функциюПересечение карты, аналогичнуюустановленному пересечению. Если на пересечении пара значений элемента[k,v]kуже находится на карте, функция пересечения распространяется на связанное значение, если она существует для кодомена_типа Карты.

Если кодомен_тип не имеет операции пересечения, связанные значения объединяются с помощью сложения. Для парциальных типов карт это приводит к добавлению на пересечении доменов пересекающихся наборов. Для полных карт пересечение и сложение в данном случае идентичны.

См. такжепересечение на Картах чисел.

Карту можно пересекать с ключевыми типами: элементом (интервал для интервала_карт) и набором. Это приводит к выбору подкарты и может быть определено как обобщенная функция отбора на Картах

.

Перегруженная функция

void add_intersection(T& result, const T& y, const P& x)

позволяет накопить пересечениеуихв первом аргументерезультата.Результатможет уже содержать данные. В этом случае пересечениеуихявляетсядобавленнымсодержаниемрезультатом.

T s1 = f, s2 = f, y = g; P x = h; // The effect of 
add_intersection(s1, y, x);       // add_intersection 
s2 += (y & x);                    // and & followed by +=
assert(s1==s2);                   // is identical

Это может быть удобно, если пересечение используется как обобщенная функция выбора. Используя типы элементов или сегментов дляP, мы можем выбрать небольшие части контейнерауи накопить их всекции.

Допустимые комбинации типов для функцииvoidadd_intersection[T&,constT&,constP&]можно суммировать в таблицеперегрузкиниже. По сравнению с другими таблицами перегрузки места расположения аргументов функций различны: Заголовки строк обозначают типT*этогообъекта. Заголовки колонок обозначают типPаргумента второй функции. Ячейки таблицы содержат аргументыTпересеченийрезультата, который является первым аргументом функций.

/* overload table for */                                T\P| e i b p
void T::add_intersection(T& result, const P&)const      ---+--------
                                                         s | s
                                                         m | m   m
                                                         S | S S
                                                         M | M M M M

Следующая таблица содержит характеристики сложности для функцииadd_intersection.

Table 1.34. Time Complexity for function add_intersection on icl containers

voidadd_intersectionT&,constT&,constP&]const

Тип домена

интервал
Тип

домен
отображение
тип

Интервал
отображение
тип

std::set

O(log n)

icl::map

O(log n)

O(log n)

интервалы_множества

O(log n)

O(n)

интервал_карты

O(log n)

O(n)

O(n)

O(n)


В приведенных ниже таблицах перегрузки приведены допустимые комбинации типов для оператора пересечения&=. Что касается моделей перегрузкивычитанияпересечений, то они возможны в пределах наборов и карт, но также и для карт в сочетании сключевыми объектами, которые являютсяключевыми элементами, интерваламии. Набор ключей.

// overload tables for             element containers:     interval containers:
T& operator &= (T&, const P&)      &= | e b s m            &= | e i b p S M
                                   ---+--------            ---+------------
                                   s  | s   s              S  | S S     S
                                   m  | m m m m            M  | M M M M M M

В то время как пересечение на картах можно рассматривать какобобщение множества пересечений. Комбинация на Картах и Наборах может быть интерпретирована какобобщенная функция выбора, поскольку она позволяет выбирать части карт, используяключилиобъекты выбора. Итак, у нас естьобобщенное пересечениедля этих перегрузок,

/* (Generalized) intersection */   &= | e b s m            &= | e i b p S M
                                   ---+--------            ---+------------
                                   s  | s   s              S  | S S     S
                                   m  |   m   m            M  |     M M   M

иaвыбор ключевых объектовздесь:

/* Selection by key objects */     &= | e b s m            &= | e i b p S M
                                   ---+--------            ---+------------
                                   s  | s   s              S  | S S     S
                                   m  | m   m              M  | M M     M

Различия по различным функциям оператора&=находятся в строке карты таблиц. Обе функции сводятся вместе для наборов в функции, установленного пересечения.

Характеристики сложности операций на месте пересечения приведены в следующих таблицах, где

n = iterative_size(y);
m = iterative_size(x); //if P is a container type

Table 1.35. Time Complexity for inplace intersection on element containers

T&оператор&=T&y,constP&x]

Тип домена

домен
отображение
тип

std::set

icl::map

std::set

O(log n)

O(m log n)

icl::map

O(log n)

O(log n)

O(m log n)

O(m log n)


Table 1.36. Time Complexity for inplace intersection on interval containers

T&оператор&=T&y,constP&x]

Тип домена

интервал
Тип

домен
отображение
тип

Интервал
отображение
тип

интервал
Наборы

интервал
Карты

интервал_множества

O(log n)

O(n)

O(m log(n+m))

интервал_карты

O(log n)

O(n)

O(log n)

O(n)

O(m log(n+m))

O(m log(n+m))


Дляicl'sдоступны следующие перегрузки:

// overload tables for             element containers:     interval containers:
T operator & (T, const P&)         &  | e b s m            &  | e  i  b  p  S1 S2 S3 M1 M3
T operator & (const P&, T)         ---+--------            ---+---------------------------
                                   e  |     s m            e  |             S1 S2 S3 M1 M3
                                   b  |       m            i  |    i        S1 S2 S3 M1 M3
                                   s  | s   s m            b  |                      M1 M3
                                   m  | m m m m            p  |                      M1 M3
                                                           S1 | S1 S1       S1 S2 S3 M1 M3
                                                           S2 | S2 S2       S2 S2 S3 M1 M3
                                                           S3 | S3 S3       S3 S3 S3 M1 M3
                                                           M1 | M1 M1 M1 M1 M1 M1 M1 M1 M3
                                                           M3 | M3 M3 M3 M3 M3 M3 M3 M3 M3

Для устранения неясностей между интервальными контейнерами в качестве результирующего типа выбираютболее тонкийконтейнерный тип.

Опять же, мы можем разделить таблицы перегрузки оператора&в части, описывающей.*обобщенное пересечениена интервальных контейнерах и вторая часть, определяющая*отбор по ключевому объектуфункциональность.

/* (Generalized) intersection */   &  | e b s m            &  | e  i  b  p  S1 S2 S3 M1 M3
                                   ---+--------            ---+---------------------------
                                   e  |     s              e  |             S1 S2 S3
                                   b  |       m            i  |    i        S1 S2 S3
                                   s  | s   s              b  |                      M1 M3
                                   m  |   m   m            p  |                      M1 M3
                                                           S1 | S1 S1       S1 S2 S3
                                                           S2 | S2 S2       S2 S2 S3
                                                           S3 | S3 S3       S3 S3 S3
                                                           M1 |       M1 M1          M1 M3
                                                           M3 |       M3 M3          M3 M3

/* Selection by key objects */     &  | e b s m            &  | e  i  b  p  S1 S2 S3 M1 M3
                                   ---+--------            ---+---------------------------
                                   e  |     s m            e  |             S1 S2 S3 M1 M3
                                   b  |                    i  |    i        S1 S2 S3 M1 M3
                                   s  | s   s m            b  |
                                   m  | m   m              p  |
                                                           S1 | S1 S1       S1 S2 S3 M1 M3
                                                           S2 | S2 S2       S2 S2 S3 M1 M3
                                                           S3 | S3 S3       S3 S3 S3 M1 M3
                                                           M1 | M1 M1       M1 M1 M1
                                                           M3 | M3 M3       M3 M3 M3

экзаменатор

десктрипция

boolпересекаетсяconstT&слева,констP&справа

Испытания, еслислеваисправапересекаются.

booldisjointconstT&Left,constP&right]

Tests, if left and right are disjoint.

intersects(x,y) == !disjoint(x,y)

bool intersects(const T&, const P&)      T\P| e b s m      T\P| e i b p S M
bool   disjoint(const T&, const P&)      ---+--------      ---+------------
                                          s | 1   1         S | 1 1     1
                                          m | 1 1 1 1       M | 1 1 1 1 1 1

See also . . .

Back to section . . .


PrevUpHomeNext

Статья Intersection раздела Chapter 1. Boost.Icl Function Reference может быть полезна для разработчиков на c++ и boost.




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



:: Главная :: Function Reference ::


реклама


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

Время компиляции файла: 2024-08-30 11:47:00
2025-05-19 20:11:14/0.031858921051025/1