Эти спецификаторы типа сбора позволяют вставлять наборы, запрещающие или допускающие дублирование элементов, соответственно. Синтаксисы<set_of>и<multiset_of>совпадают, поэтому они описаны вместе.
[multi]set_of set view - это std:: [multi]set signature-compatible interface к основной куче элементов, содержащихся в<bimap>.
Существует два варианта: set_of, который не допускает дублирования элементов (по отношению к связанному с ним предикату сравнения) и multiset_of, который принимает эти дубликаты. Интерфейс этих двух вариантов во многом одинаков, поэтому они документируются вместе с их различиями, явно отмеченными там, где они существуют.
Если вы посмотрите на карту сбоку, вы будете использовать вид карты, а если вы посмотрите на нее в целом, вы будете использовать заданный вид.
namespaceboost{namespacebimaps{namespaceviews{template<-implementation defined parameter list->class-implementation defined view name-{public:typedef-unspecified-key_type;typedef-unspecified-value_type;typedef-unspecified-key_compare;typedef-unspecified-value_compare;typedef-unspecified-allocator_type;typedef-unspecified-reference;typedef-unspecified-const_reference;typedef-unspecified-iterator;typedef-unspecified-const_iterator;typedef-unspecified-size_type;typedef-unspecified-difference_type;typedef-unspecified-pointer;typedef-unspecified-const_pointer;typedef-unspecified-reverse_iterator;typedef-unspecified-const_reverse_iterator;typedef-unspecified-info_type;this_type&operator=(constthis_type&x);allocator_typeget_allocator()const;// iteratorsiteratorbegin();const_iteratorbegin()const;iteratorend();const_iteratorend()const;reverse_iteratorrbegin();const_reverse_iteratorrbegin()const;reverse_iteratorrend();const_reverse_iteratorrend()const;// capacityboolempty()const;size_typesize()const;size_typemax_size()const;// modifiersstd::pair<iterator,bool>insert(constvalue_type&x);iteratorinsert(iteratorposition,constvalue_type&x);template<classInputIterator>voidinsert(InputIteratorfirst,InputIteratorlast);iteratorerase(iteratorposition);template<classCompatibleKey>size_typeerase(constCompatibleKey&x);iteratorerase(iteratorfirst,iteratorlast);boolreplace(iteratorposition,constvalue_type&x);// Only in map views// {template<classCompatibleKey>boolreplace_key(iteratorposition,constCompatibleKey&x);template<classCompatibleData>boolreplace_data(iteratorposition,constCompatibleData&x);template<classKeyModifier>boolmodify_key(iteratorposition,KeyModifiermod);template<classDataModifier>boolmodify_data(iteratorposition,DataModifiermod);// }voidswap(this_type&x);voidclear();// observerskey_comparekey_comp()const;value_comparevalue_comp()const;// set operationstemplate<classCompatibleKey>iteratorfind(constCompatibleKey&x);template<classCompatibleKey>const_iteratorfind(constCompatibleKey&x)const;template<classCompatibleKey>size_typecount(constCompatibleKey&x)const;template<classCompatibleKey>iteratorlower_bound(constCompatibleKey&x);template<classCompatibleKey>const_iteratorlower_bound(constCompatibleKey&x)const;template<classCompatibleKey>iteratorupper_bound(constCompatibleKey&x);template<classCompatibleKey>const_iteratorupper_bound(constCompatibleKey&x)const;template<classCompatibleKey>std::pair<iterator,iterator>equal_range(constCompatibleKey&x);template<classCompatibleKey>std::pair<const_iterator,const_iterator>equal_range(constCompatibleKey&x)const;// Only in maps views// {template<classLowerBounder,classUpperBounder>std::pair<iterator,iterator>range(LowerBounderlower,UpperBounderupper);template<classLowerBounder,classUpperBounder>std::pair<const_iterator,const_iterator>range(LowerBounderlower,UpperBounderupper)const;typedef-unspecified-mapped_type;typedef-unspecified-data_type;// Equal to mapped_type// Only in for `set_of` collection type// {template<classCompatibleKey>constmapped_type&at(constCompatibleKey&k)const;// Only if the other collection type is mutable// {template<classCompatibleKey>mapped_type&operator[](constCompatibleKey&k);template<classCompatibleKey>mapped_type&at(constCompatibleKey&k);// }// Only if info_hook is used// {template<classCompatibleKey>info_type&info_at(constCompatibleKey&k);template<classCompatibleKey>constinfo_type&info_at(constCompatibleKey&k)const;// }// }// }};// view comparisonbooloperator==(constthis_type&v1,constthis_type&v2);booloperator<(constthis_type&v1,constthis_type&v2);booloperator!=(constthis_type&v1,constthis_type&v2);booloperator>(constthis_type&v1,constthis_type&v2);booloperator>=(constthis_type&v1,constthis_type&v2);booloperator<=(constthis_type&v1,constthis_type&v2);}// namespace views}// namespace bimap}// namespace boost
В случае одного из них<bimap<{multi}set_of<Left>,...>>
Эффекты:Вставляет<x>в<bimap>, к которому относится заданный вид, если
заданный вид не является уникальным или не существует другого элемента с эквивалентным ключом,
И вставка допускается другими установленными спецификациями<bimap>.
Возвращение:Возвратное значение — пара<p>.<p.second>—<true>, если и только если вставка состоялась. При успешной вставке<p.first>указывает на вставленный элемент; в противном случае<p.first>указывает на элемент, который вызвал запрещение вставки. Обратите внимание, что более одного элемента может привести к тому, что вставка не допускается.
Эффекты:<position>используется в качестве подсказки для повышения эффективности операции. Вставляет<x>в<bimap>, к которому относится вид, если
заданный вид не является уникальным или не существует другого элемента с эквивалентным ключом,
И вставка разрешена всеми другими взглядами<bimap>.
Возвращается:При успешной вставке итератор к вновь вставленному элементу. В противном случае итератор к элементу, который вызвал вставку, будет запрещен. Обратите внимание, что более одного элемента может привести к тому, что вставка не допускается.
Требуется:<InputIterator>является модельюИтератора вводанад элементами типа<value_type>или типа, конвертируемого в значение_тип.<first>и<last>не являются итераторами в любом представлении о<bimap>, к которому принадлежит этот индекс.<last>достижимо от<first>.
Безопасность исключения:Сильная. Если какое-либо пользовательское действие приводит к исключению, то<bimap>, к которому относится заданный вид, остается в исходном состоянии.
Безопасность исключения:Сильная. Если какое-либо пользовательское действие приводит к исключению, то<bimap>, к которому относится заданный вид, остается в исходном состоянии.
Безопасность исключения:Сильная. Если какое-либо пользовательское действие приводит к исключению, то<bimap>, к которому относится заданный вид, остается в исходном состоянии.
<KeyModifier>является модельюУнарная функция, принимающая аргументы типа:<key_type&>;<position>, является действительным итератором точки зрения.
Эффекты:Звонки<mod(e.first)>, где e — элемент, на который указывает положение и перестраивает<*position>во все виды<bimap>. Если перегруппировка не удается, элемент стирается. Перестройка является успешной, если
вид карты не является уникальным или не существует другого элемента с эквивалентным ключом,
Перестройка допускается всеми другими видами<bimap>.
Последующие условия:Срок действия<position>сохраняется, если операция увенчается успехом.
Возвращается:<true>если операция удалась,<false>в противном случае.
Безопасность исключения:Базовая. Если исключение выбрасывается какой-либо пользовательской операцией (за исключением, возможно, мода), то элемент, указанный позицией, стирается.
Примечание:Предоставляется только для просмотра карт.
Требуется:<DataModifier>является модельюУнарная функция, принимающая аргументы типа:<mapped_type&>;<position>, является действительным итератором точки зрения.
Эффекты:Звонки<mod(e.second)>, где e является элементом, указанным по положению и перестраивает<*position>во все виды<bimap>. Если перегруппировка не удается, элемент стирается. Перестройка является успешной, если
вид карты противоположности не является уникальным или не существует другого элемента с эквивалентным ключом в этом виде,
Перестройка допускается всеми другими видами<bimap>.
Последующие условия:Срок действия<position>сохраняется, если операция увенчается успехом.
Возвращается:<true>если операция удалась,<false>в противном случае.
Безопасность исключения:Базовая. Если исключение выбрасывается какой-либо пользовательской операцией (за исключением, возможно, мода), то элемент, указанный позицией, стирается.
Примечание:Предоставляется только для просмотра карт.
<[multi]set_of>просмотров обеспечивают полную функциональность поиска, требуемуюСортированный ассоциативный контейнериУникальный ассоциативный контейнер, а именно<find>,<count>,<lower_bound>,<upper_bound>и<equal_range>. Кроме того, эти функции членов шаблонизированы, чтобы обеспечить нестандартные аргументы, таким образом расширяя типы разрешенных поисковых операций.
Тип<CompatibleKey>называетсясовместимым ключом<Compare>, если<(CompatibleKey,Compare)>является совместимым расширением<Compare>. Это означает, что<Compare>, а также будучи строгим слабым упорядочением, принимает аргументы типа<CompatibleKey>, что обычно означает, что он имеет несколько перегрузок<operator()>.
Диапазон функций не определен для отсортированных ассоциативных контейнеров, но<[multi]set_of>вид карты обеспечивает его в качестве удобной утилиты. Диапазон или интервал определяется двумя условиями для нижней и верхней границ, которые моделируются после следующих понятий.
РассмотримСтрогое слабое упорядочивание<Compare>над значениями типа Ключ. Тип<LowerBounder>считается нижним пределом<Compare>, если
<LowerBounder>является<Predicate>более<Key>,
Если<lower(k1)>и<!comp(k2,k1)>, то<lower(k2)>
Для каждого<lower>типа<LowerBounder>,<comp>типа<Compare>и<k1>,<k2>типа<Key>. Точно так же верхняя граница является типом<UpperBounder>, который
<UpperBounder>является<Predicate>более<Key>,
Если<upper(k1)>и<!comp(k1,k2)>, то<upper(k2)>
Для каждого<upper>типа<UpperBounder>,<comp>типа<Compare>и<k1>,<k2>типа<Key>.
Требуется:<LowerBounder>и<UpperBounder>являются нижней и верхней границей<key_compare>соответственно.
Эффекты:Возвращает пару итераторов, указывающих на начало и один прошедший конец последовательности элементов, удовлетворяющих нижнюю и верхнюю одновременно. Если таких элементов не существует, итераторы указывают на первый элемент, удовлетворяющий более низкому уровню, или равны<end()>, если этот последний элемент не существует.
Сложность:O(log(n)).
Варианты:Вместо нижнего или верхнего (или обоих) может быть предусмотрено единственное значение<boost::bimap::unbounded>. Это служит предикатом, которому удовлетворяют все значения типа<key_type>.
Примечание:Предоставляется только для просмотра карт.
Эффекты:Возвращает ссылку<mapped_type>, связанную с<k>, или бросает<std::out_of_range>, если такой ключ не существует.
Сложность:O(log(n)).
Примечание:Применяется только при использовании<set_of>.
Симметрия бимапа накладывает некоторые ограничения на<operator[]>и непостоянную версию at(), которые не встречаются в<std::maps>. Тей предоставляется только в том случае, если другой тип сбора является изменчивым<list_of>,<vector_of>и<unconstrained_set_of>.
Виды не могут быть сериализованы сами по себе, но только как часть<bimap>, в которую они встроены. При описании дополнительных предварительных условий и гарантий, связанных с<[multi]set_of>представлениями в отношении сериализации их встраиваемых контейнеров, мы используем понятия, определенные в разделе<bimap>сериализации.
Операция:сохранение<bimap>м до выходного архива (архив XML) ar.
Требуется:Никаких дополнительных требований к контейнерам.
Операция:загрузка<bimap>м' из входного архива (архив XML) ar.
Требуется:В дополнение к общим требованиям<value_comp()>должна быть сериализация-совместима с<m.get<i>().value_comp()>, где i - положение упорядоченного вида в контейнере.
Постусловия:При успешной загрузке каждый из элементов<[begin(),end())>является восстановленной копией соответствующего элемента в<[m.get<i>().begin(),m.get<i>().end())>.
Операция:сохранение итератора или<const_iterator>его в выходной архив (архив XML) ar.
Требуется:<it>является действительным итератором представления. Связанные<bimap>ранее были спасены.
Операция:загрузка<iterator>или<const_iterator><it>' из входного архива (архив XML) ar.
Постусловия:При удачной погрузке, если она была сносной, то<*it>' является восстановленной копией<*it>, в противном случае<it><==end()>.
Примечание:Допускается, что это<const_iterator>и восстановленный<it>итератор, или наоборот.
Статья set_of Reference раздела Chapter 1. Boost.Bimap Reference может быть полезна для разработчиков на c++ и boost.
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.