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

Bimap Reference

Boost , Chapter 1. Boost.Bimap , 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

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

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

Вставка и удаление элементов всегда выполняются через соответствующий интерфейс любого из трех представлений bimap; эти операции, однако, оказывают влияние и на все другие представления: например, вставка через заданный вид может потерпеть неудачу, поскольку существует другой вид, который запрещает операцию для сохранения ее инвариантности (например, уникальность элементов). Глобальные операции, выполняемые совместно в любой точке зрения, можно свести к шести примитивам:

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

Последние два примитива заслуживают дальнейшего объяснения: для того, чтобы гарантировать инварианты, связанные с каждым представлением (например, некоторый определенный порядок), элементы bimap не являются изменчивыми. Чтобы преодолеть это ограничение, взгляды обнажают функции членов для обновления и модификации, что позволяет мутировать элементы контролируемым образом.

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

Для установления оценок сложности вид характеризуется его сигнатурой сложности, состоящей из следующих связанных функций по количеству элементов:

  • cn: копирование
  • i(n: вставка
  • h(n): : подсказка
  • d(n: удаление
  • rn: замена
  • mn: изменение

Если тип сбора отношения left_based или right_based, и мы используем подскрипт l для обозначения левого вида и r для правого вида, то вставка элемента в такой контейнер представляет собой сложность Oi_l)+i_rn), где n - число элементов. Если тип коллекционного отношения не является побочным, то есть дополнительный термин для добавления, который вносит тип коллекционного отношения. Используя a для обозначения вышеприведенного представления, сложность вставки теперь будет O(i_l(n)+n)+i_a(n)). Чтобы сократить обозначение, мы принимаем следующие определения:

  • Cc_lnc_rn
  • I(nn)i_r(n)
  • H(nn)h_r(n)
  • D(n)d_r(n)
  • R(n)r_rn
  • M(nn)m_r(n)

Указатели типов наборов передаются в качестве аргументов для инстанциации в bimap и предоставляют информацию, необходимую для включения соответствующих представлений. В настоящее время, Boost. Bimap предоставляет спецификаторы типов коллекций. Тип набора определяет ограничения двух видов карты. Тип отношения для сбора определяет основные ограничения представления. Если используется left_based (параметр по умолчанию) или right_based, то тип коллекционирования будет основан на соответствующем типе сбора слева или справа.

Тип боковой коллекции

Тип боковой коллекции

Включать

set_of

set_of_relation

boost/bimap/set_ofhpp

multiset_of

multise_of_relation

boost/bimap/multiset_ofhpp

unordered_set_of

unordered_set_of_relation

boost/bimap/unordered_set_ofhpp

unordered_multiset_of

unordered_multiset_of_relation

boost/bimap/unordered_multiset_of.hpp

list_of

list_of_relation

boost/bimap/list_of.hpp

vector_of

vector_of_relation

boost/bimap/vector_ofhpp

unconstrained_set_of

unconstrained_set_of_relation

boost/bimap/unconstrained_set_of.hpp

left_based

boost/bimap/bimaphpp

right_based

boost/bimap/bimaphpp

Теги - это обычные типы, используемые в качестве мнемоники для типов, хранящихся в bimap. Повышаю. Bimap использует помеченную идиому, чтобы пользователь мог указать эти теги.

namespace boost {
namespace bimaps {
template< class Type, typename Tag >
struct tagged;
// bimap template class
template
<
    class LeftCollectionType, class RightCollectionType,
    class AdditionalParameter_1 = detail::not_specified,
    class AdditionalParameter_2 = detail::not_specified
>
class bimap - implementation defined { : public SetView } -
{
    public:
    // Metadata
    typedef -unspecified- left_tag;
    typedef -unspecified- left_map;
    typedef -unspecified- right_tag;
    typedef -unspecified- right_map;
    // Shortcuts
    // typedef -side-_map::-type- -side-_-type-;
    typedef -unspecified- info_type;
    // Map views
     left_map  left;
    right_map right;
    // Constructors
    bimap();
    template< class InputIterator >
    bimap(InputIterator first,InputIterator last);
    bimap(const bimap &);
    bimap& operator=(const bimap& b);
    // Projection of iterators
    template< class IteratorType >
    left_iterator project_left(IteratorType iter);
    template< class IteratorType >
    left_const_iterator project_left(IteratorType iter) const;
    template< class IteratorType >
    right_iterator project_right(IteratorType iter);
    template< class IteratorType >
    right_const_iterator project_right(IteratorType iter) const;
    template< class IteratorType >
    iterator project_up(IteratorType iter);
    template< class IteratorType >
    const_iterator project_up(IteratorType iter) const;
    // Support for tags
    template< class Tag >
    struct map_by;
    template< class Tag >
    map_by<Tag>::type by();
    template< class Tag >
    const map_by<Tag>::type & by() const;
    template< class Tag, class IteratorType >
    map_by<Tag>::iterator project(IteratorType iter);
    template< class Tag, class IteratorType >
    map_by<Tag>::const_iterator project(IteratorType iter) const
};
} // namespace bimap
} // namespace boost

Это основной компонент Boost. Бимап.

В описаниях операций bimap мы принимаем схему, изложенную в разделе подписи сложности.

bimap имеет следующие типы:

  1. Левое коллекционирование Тип и правильное коллекционирование Тип - это спецификации типа сбора, необязательно помеченные или любой тип, необязательно помеченный, и в этом случае эта сторона действует как набор.
  2. Дополнительный параметр_{1/2} может быть любым упорядоченным подмножеством:
    • Спецификация CollectionTypeOfRelation
    • Распределитель
left_tag, right_tag

Теги для каждой стороны карты. Если пользователь не указал какой-либо тег, по умолчанию теги member_at::left и member_at::right.

left_key_type, right_key_type

Ключевой тип каждой стороны. В bimap<A,B>left_key_type является A и right_key_type является B. Если есть теги, лучше использовать: Bimap::map_by<Tag>::key_type.

left_data_type, right_data_type

Тип данных с каждой стороны. В бимап левый_ключ_тип B и правый_ключ_тип A. Если есть теги, лучше использовать: Bimap::map_by<Tag>::data_type.

left_value_type, right_value_type

Тип значения, используемый для представлений. Если есть теги, лучше использовать: Bimap::map_by<Tag>::value_type.

left_iterator, right_iterator
left_const_iterator, right_const_iterator

Итераторы мнений. Если есть теги, лучше использовать: Bimap::Tag>::iterator и Bimap::Tag>::const_iterator

left_map, right_map

Вид карты с каждой стороны. Если есть теги, лучше использовать: Bimap::map_by<Tag>::type.

bimap();
  • Эффекты: Построение пустой бимап.
  • Сложность:Константа.
template<typename InputIterator>
bimap(InputIterator first,InputIterator last);
  • Требуется: InputIterator представляет собой модель Input Iterator над элементами типа relation или типа, конвертируемого в relation. Последнее можно получить от first.
  • Влияние:Создает пустую bimap и заполняет ее элементами в диапазоне [первый,последний). Вставка каждого элемента может или не может быть успешной в зависимости от принятия типами набора bimap.
  • Сложность: O(m*H(m)), где m - число элементов в [первый,последний).
bimap(const bimap & x);
  • Эффекты: Конструирует копию x, копируя ее элементы, а также ее внутренние объекты (ключевые экстракторы, объекты сравнения, распределитель)
  • Postconditions: *this == x. The order of the views of the bimap is preserved as well.
  • Сложность: O(x.size()*log(x.size()) + C(x.size()))
~bimap()
  • Последствия:Уничтожает bimap и все содержащиеся элементы. Порядок, в котором разрушаются элементы, не уточняется.
  • Сложность: O(n).
bimap& operator=(const bimap& x);
  • Effects: Replaces the elements and internal objects of the bimap with copies from x.
  • Постусловия:*это==x. Сохраняется также порядок взглядов bimap.
  • Returns: *this.
  • Complexity: O(n + x.size()*log(x.size()) + C(x.size())).
  • Безопасность исключения:Сильные, при условии, что операции копирования и назначения типов ctor_args_list не выбрасываются.

Учитывая bimap с просмотрами v1 и v2, мы говорим, что v1-iterator it1 и v2-iterator it2 эквивалентны, если:

  • it1 ==i1.end() И it2 ==i2(),
  • OR it1 и it2 указывают на тот же элемент.
template< class IteratorType >
left_iterator project_left(IteratorType iter);
template< class IteratorType >
left_const_iterator project_left(IteratorType iter) const;
  • Требуется: IteratorType представляет собой итератор просмотра бимап. является действительным итератором некоторого представления *это (т.е. не относится к какому-либо другому bimap)
  • Эффекты: Возвращает левый итератор просмотра карты, эквивалентный it.
  • Сложность:Константа.
  • Безопасность исключения: нотроу.
template< class IteratorType >
right_iterator project_right(IteratorType iter);
template< class IteratorType >
right_const_iterator project_right(IteratorType iter) const;
  • Требуется: IteratorType представляет собой итератор просмотра бимап. является действительным итератором некоторого представления *это (т.е. не относится к какому-либо другому bimap)
  • Последствия:Возвращает правильный итератор просмотра карты, эквивалентный it.
  • Сложность:Константа.
  • Безопасность исключения: нотроу.
template< class IteratorType >
iterator project_up(IteratorType iter);
template< class IteratorType >
const_iterator project_up(IteratorType iter) const;
  • Требуется: IteratorType представляет собой итератор просмотра бимап. является действительным итератором некоторого представления *это (т.е. не относится к какому-либо другому bimap)
  • Effects: Returns a collection of relations view iterator equivalent to it.
  • Сложность:Константа.
  • Безопасность исключения: нотроу.
template< class Tag >
struct map_by;
  • map_by<Tag>::type дает вид карты, помеченный Tag. map_byTag>::-имя типа- такое же, как map_by<::-имя типа-.
  • Requires: Tag is a valid user defined name of the bimap.
template< class Tag >
map_by<Tag>::type by();
template< class Tag >
const map_by<Tag>::type & by() const;
  • Requires: Tag is a valid user defined name of the bimap.
  • Effects: Returns a reference to the map view tagged with Tag held by *this.
  • Сложность:Константа.
  • Безопасность исключения: нотроу.
template< class Tag, class IteratorType >
map_by<Tag>::iterator project(IteratorType iter);
template< class Tag, class IteratorType >
map_by<Tag>::const_iterator project(IteratorType iter) const
  • Требуется: Тэг является действительным именем, определенным пользователем карты. IteratorType представляет собой итератор просмотра бимап. является действительным итератором некоторого представления * этого (т.е. не относится к какому-либо другому bimap)
  • Effects: Returns a reference to the map view tagged with Tag held by *this.
  • Сложность:Константа.
  • Безопасность исключения: нотроу.

bimap можно архивировать и извлекать с помощью Boost.Serialization. Повышаю. Bimap не раскрывает интерфейс публичной сериализации, как это предусмотрено Boost. Сама сериализация. Поддерживаются как обычные, так и XML-архивы.

Каждая из установленных спецификаций, включающая заданную bimap, вносит свои собственные предварительные условия, а также гарантии на извлеченные контейнеры. При их описании используются следующие понятия. Тип T является сериализируемым (resp. XML-сериализируемым), если любой объект типа T может быть сохранен в выходной архив (архив XML) и позже извлечен из входного архива (архив XML), связанного с тем же хранилищем. Если x' типа T загружается из информации сериализации, сохраненной от другого объекта x, мы говорим, что x' представляет собой восстановленную копию Pred по сравнению с (T,T) и объекты p и q, мы говорим, что q является сериализация-совместима с p, если

  • p(x,y)==q(x

для каждого x и y типа T и x и y' восстанавливаются копии x и y соответственно.

  • Requires: Value is serializable (XML-serializable). Additionally, each of the views of b can impose other requirements.
  • Безопасность исключения: Сильная по отношению к b. Если будет сделано исключение, Ар может быть оставлен в непоследовательном состоянии.
  • Requires: Value is serializable (XML-serializable). Additionally, each of the views of b' can impose other requirements.
  • Безопасность исключения: Базовая. Если будет сделано исключение, Ар может быть оставлен в непоследовательном состоянии.

PrevUpHomeNext

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




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



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


реклама


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

Время компиляции файла: 2024-08-30 11:47:00
2025-05-20 01:06:35/0.011013984680176/1