Шаблон класса является интрузивным древовидным контейнером, который используется для построения интрузивных splay_set и splay_multiset контейнеров. Гарантия бесполетности сохраняется только в том случае, если объект Key_compare не бросает.
Параметр шаблона T - это тип, которым должен управлять контейнер. Пользователь может указать дополнительные опции и если не предусмотрены параметры по умолчанию.
Контейнер поддерживает следующие варианты: base_hook<>/member_hook<>/value_traits<>, constant_time_size<>, size_type<> и compare<>.
splaytree
public
construct/copy/destruct
splaytree();
Эффекты: Конструкция пустого контейнера.
Комплексность: Постоян.
Топы: Если значение_traits::node_traits::конкурсные конструкторы (это не происходит с предпостановкой). Базовая гарантия.
Effects: Detaches all elements from this. Объекты в наборе не удаляются (т. е. не называются деструкторами), но узлы в соответствии с параметром шаблона value_traits являются восстановленными и, таким образом, могут быть повторно использованы.
комплексность: Линейный к элементам, содержащимся в *это.
Throws: Ничего.
splaytree public member functions
iteratorbegin();
Effects: Returns an iterator indicating to the beginning of the container.
Complexity: Constant.
Throws Ничего.
const_iteratorbegin()const;
Effects: Returns a const_iterator, указывающий на начало контейнера.
Complexity: Constant.
Throw
const_iteratorcbegin()const;
Effects: Returns a const_iterator, указывающий на начало контейнера.
Complexity: Constant.
<1718>
iteratorend();
Effects: Returns an iterator indicating to the end of the container.
Complexity: Constant.
Throws: Nothing.
const_iteratorend()const;
Effects: Returns a const_iterator указывающий на конец контейнера.
Complexity: Constant.
ThrowsНичего не >>>>>>>
const_iteratorcend()const;
Effects: Returns a const_iterator, указывающий на конец контейнера.
Complexity: Constant.
Throw
reverse_iteratorrbegin();
Effects: Returns a reverse_iterator указывающий на начало обратного контейнера.
Complexity: Constant.
Throws<172> Ничего.
const_reverse_iteratorrbegin()const;
Effects: Returns a const_reverse_iterator указывающий на начало обратного контейнера.
Complexity: Constant.
const_reverse_iteratorcrbegin()const;
Effects: Returns a const_reverse_iterator указывающий на начало обратного контейнера.
Complexity: Constant.
reverse_iteratorrend();
Effects: Returns a reverse_iterator, указывающий на конец обратного контейнера.
Complexity: Constant.
Throws
const_reverse_iteratorrend()const;
Effects: Returns a const_reverse_iterator указывающий на конец обратного контейнера.
complexity: Constant.
const_reverse_iteratorcrend()const;
Effects: Returns a const_reverse_iterator указывающий на конец обратного контейнера.
complexity: Constant.
iteratorroot();
Effects: Returns a iterator indicating to the root node of the container or end() if not present.
Complexity: Constant.
Throws<172> Ничего.
const_iteratorroot()const;
Effects: Returns a const_iterator указывающий на корневой узел контейнера или cend() если не присутствует.
Complexity: Constant.
const_iteratorcroot()const;
Effects: Returns a const_iterator указывающий на корневой узел контейнера или cend() если не присутствует.
Complexity: Constant.
key_comparekey_comp()const;
Effects: Returns the key_compare object used by the container.
Complex: Constant.
Throws>>>>>> Если Key_compare выбрасывает копи-конструктор.
value_compare value_comp()const;
Effects: Returns the value_compare object used by the container.
Complex: Constant.
Throws>>>>> Если value_compare copy-constructor бросает.
boolпустая()const;
Следы: возвраты верны, если контейнер пуст.
Complexity: Constant.
Throws
size_typesize()const;
Effects: Возвращает количество элементов, хранящихся в контейнере.
Complexity: Линейный к элементам, содержащимся в *это при отключении варианта постоянного времени. Постоянное время в противном случае.
<1920>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Если своп-звонок фанктора сравнения бросится.
Шаблон>voidclone_ from(constsplay>& src,Cloner Cloner должен уступить узлам, эквивалентным исходным узлам.
Следы: Erases all the elements from *This call Disposer::operator() (pointer), клонирует все элементы из src, звонящего Cloner::operator() (const_reference) и вставляет их на *это.
Комплексность: Линейный для стерты плюс вставленные элементы.
Throws
: Если клонист бросает или предикатирует присвоение копий. Базовая гарантия. Дополнительные примечания: он также копирует альфа-фактор из исходного контейнера.
template<typename Cloner,typename Disposer>voidclone_from(splay>>>>>>>%2> Cloner должен уступить узлам, эквивалентным исходным узлам.
Следы: Erases all the elements from *This call Disposer::operator() (pointer), клонирует все элементы из src call Cloner::operator (reference) и вставляет их на *это.
<340>Комплексность
: Линейный для стерты плюс вставленные элементы.
<340>Throws
: Если клонист бросает или предикатное копирование. Базовая гарантия.
Note: Эта версия может изменить исходный контейнер, полезный для реализации семантики перемещения.
iteratorinsert_equal(reference value);
Requires: значение должно быть l value
Effects Если заказывает функцию внутреннего ключа_композиции. Сильная гарантия.
Примечание: Не влияет на обоснованность итераторов и ссылок. Никаких копирайтеров не называют.
Requires: значение должно быть l value, и "hint" должно быть действительный iterator.
<222>Effects> Если «хинт» - это верхняя часть, то вставка занимает постоянное время (два сравнения в худшем случае)
Комплексность: Логорифмическая в целом, но это амортизированное постоянное время, если t вставляется непосредственно перед подсказкой.
Throws: Если внутренняя ключ_комплексная функция выбрасывает. Сильная гарантия.
Примечание: Не влияет на обоснованность итераторов и ссылок. Никаких копирайтеров не называют.
Текулятор>>>12>>13>>>>3>2>3>2>3>2>3>28>30>30>10>200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 Однако это линейно в N, если диапазон уже отсортирован по value_comp().
Throws: Nothing.
<330>Note: Не влияет на действительность итераторов и ссылок. Никаких копирайтеров не называют.
>> >>>> >> >> >> >>> >>> >> >> > >> >>>2>>2>>>>>2>>>>>2>>>>>>2>>>>2>>2>>>30>>>30>>30>2000>>200>> Никаких копирайтеров не называют.
22>Requires: значение должно быть l value, и "int" должен быть действительный iterator
Effects Никаких копирайтеров не называют.
> > >> > >> >> >> > >inert_unique_check(>>>>> ключ& Если значение может быть добавлено, то оно верно в возвратной паре боролеана и заполняет «commit_data», которая предназначена для использования с функцией «insert_commit».
Complexity: Средняя сложность в большинстве логарифмических.
Throws: Если функция композаказания бросается. Сильная гарантия.
> > > > >> >> > >> > > > >>> > > >>> Если значение может быть добавлено, то оно верно в возвратной паре боролеана и заполняет «commit_data», которая предназначена для использования с функцией «insert_commit».
Complexity: Logarithmic в целом, но это амортизированное постоянное время, если t вставляется непосредственно перед подсказкой.
Throws: Если функция компоринга бросается. Сильная гарантия.
template<имя типаКлавиатуре>>> Различие заключается в том, что комп сравнивает произвольный ключ с содержащимися значениями.
Следы: Проверяет, может ли значение быть вставлено в контейнер, используя предоставленный пользователем ключ вместо самого значения, используя «синт» в качестве намека на то, где он будет вставлен.
Возвращение: Если есть эквивалентное значение возвращает пару, содержащую итератор, к уже существующему значению и ложному. Если значение может быть добавлено, то оно верно в возвратной паре боролеана и заполняет «commit_data», которая предназначена для использования с функцией «insert_commit».
Complexity: Logarithmic в целом, но это амортизированное постоянное время, если t вставляется непосредственно перед подсказкой.
Throws: Если функция компоринга бросается. Сильная гарантия.
Заметки: Эта функция используется для улучшения производительности при построении значения_типа дорого: если есть эквивалентное значение, то построенный объект должен быть отброшен. Много раз часть конструкции, которая используется для наложения заказа, намного дешевле для построения, чем тип value_, и эта функция предлагает возможность использовать этот ключ, чтобы проверить, будет ли вставка успешной.
Если проверка успешена, пользователь может построить параметр value_type и использовать "insert_commit" для вставки объекта в постоянное время. Это может дать полную сложность постоянного времени для вставки: check(O(1)) + commit(O(1)).
"commit_data" остается действительным для последующего "insert_commit" только в том случае, если больше объектов не вставлены или стерты из контейнера.
Requires: значение должно быть l value of type_type. commit_data, должно быть, был получен из предыдущего звонка на «insert_check».
>
Ревки: Вставка значения в контейнере с помощью информации, полученной из "commit_data", которую заполнили предыдущие "insert_check".
>>РевацииИсполнители: Итератор для вновь вставленного объекта.
>>>>>>> Никакое значение не должно быть вставлено или стерто между вызовами "insert_check" и "insert_commit".
Текулятор>><112>>>13>2>>2>> 2>>>>>2>>>>28>>>28>>20>30>10>20000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 Однако это линейно в N, если диапазон уже отсортирован по value_comp().
Throws: Nothing.
<330>Note: Не влияет на действительность итераторов и ссылок. Никаких копирайтеров не называют.
>> 1>insert_ before (const_iterator pos,reference value7>;
Requires: значение должно быть l value, "pos" должен быть действительным итератором (или концом) и должен быть успецесором значения, вставленным в соответствии с предикатом
>>>
>>>>
>>>>>>
>>>>>
>>>>>>>>> Это низкоуровневая функция, которая будет использоваться только по причинам производительности продвинутыми пользователями.
voidpush_back(reference value);
Requires: значение должно быть l value, и оно должно быть не меньше, чем наибольший вставленный ключ
Effects
Эта функция немного более эффективна, чем использование «insert_ before». Это низкоуровневая функция, которая будет использоваться только по причинам производительности продвинутыми пользователями.
voidpush_front(reference value);
Requires: значение должно быть l value, и оно должно быть не больше, чем минимальный вставленный ключ
Effects Эта функция немного более эффективна, чем использование «insert_ before». Это низкоуровневая функция, которая будет использоваться только по причинам производительности продвинутыми пользователями.
iteratorerase(const_iterator i);
Effects: Erases элемент, на который указывает i.
Complexity Средняя сложность для стерточного элемента - постоянное время.
>>>>>>>>>3>>>>>>>>>>>>>>3>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>3>>>>>>>>3>>>>>>>>>>>>>>3>>>>>>>>>>>>>>>>>3>>>>>>>>3>>>>>> Находится диапазон, содержащий все элементы, ключ которых k или пустой диапазон, который указывает положение, где эти элементы будут, если нет элементов с ключом k.
<336>Сложность
: Logarithmic.
Throws: Если key_compare бросить. Дополнительное примечание: неконстантная функция, игра выполняется для первого элемента равного диапазона «ценности»
template<имя типа>> > >>> > >> >>>> > > > > >>>>>>>>>> Находится диапазон, содержащий все элементы, ключ которых k или пустой диапазон, который указывает положение, где эти элементы будут, если нет элементов с ключом k.
Сложность: Logarithmic.
Throws: Если comp бросает. Дополнительное примечание: неконструкция, игра выполняется для первого элемента равного диапазона «ключа»
template<имя типа> > > > > > =2> > >> >>> Дополнительная заметка: функция минусов, не выполняется
> > > >> >> > > > > > >
первый = нижний предел (нижний ключ) если левый, верхний_подъемный (нижний ключ) в противном случае
второй = верхний_привод (upper_key)>
template<имя типа> > >
16> = нижний_округ (нижний_ключ, комп) если левый_закрытый, верхний_обратный(нижний_округ, комп)
> > > >> > > > > > >
Следы: Возвращает пару со следующими критериями:
первый = нижний предел (нижний ключ) если левый, верхний_привод (нижний ключ) в противном случае
секундный = верхний_привод (upper_key) если правый, нижний_привод (upper_key)
template<имя типа < 3> < 3> < 2> < 13> < 2> > >
первый = нижний (нижний) ключ, комп) если левый_закрытый, верхний_прицеп (нижний_под ключ, комк)
iteratoriterator_to(reference value);
Requires: значение должно быть l value и должно быть в наборе подходящего типа. В противном случае поведение не определено.
Следы: Возврат: действительный итератор i, принадлежащий к набору, который указывает на значение
Requires: replace_ this must be a valid iterator of *this and with_this must not be included in any container.
Eff>< Контейнер не нуждается в перебалансировке.
Комплексность: Постоян.
Throws: Nothing.
Note: Данная функция будет нарушать порядок контейнера инвариантов, если с_это не эквивалентно *заменить это согласно правилам заказа. Эта функция быстрее, чем стирание и вставка узла, поскольку не требуется перебалансировки или сравнения.
voidremove_node(reference value);
Effects: удалить "значение" из контейнера.
Throws: Nothing.
template<typename T,class... Если есть элемент в ключе, эквивалентном ключу элемента из источника, то этот элемент не извлекается из источника.
Почтовые условия: Очки и ссылки на переданные элементы источника относятся к тем же элементам, но как члены *это. Итераторы, относящиеся к переданным элементам, будут продолжать ссылаться на их элементы, но теперь они ведут себя как итераторы в *это, а не в источник.
Throws: Ничего, если объект сравнения не бросает.
Сложность: N log(a.size() + N) (N имеет источник значения.size()
Requires: значение должно быть l value и должно быть в наборе соответствующего типа. В противном случае поведение не определено.
Следы: Возврат: действительный итератор i, принадлежащий к набору, который указывает на значение
Сложность: Постоян.
Throws: Ничего.
Ноте: Эта статическая функция доступна только в том случае, если >>
статическийvoidinit_node(reference value);
<120>Requires: значение не должно быть в контейнере.
20>Следы>
Статья Class template splaytree раздела The Boost C++ Libraries BoostBook Documentation Subset Reference может быть полезна для разработчиков на c++ и boost.
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.