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

Boost.MultiIndex Documentation - Index reference

Boost , , Boost.MultiIndex Documentation - 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

Boost.MultiIndex Index reference



Contents

Index concepts

<multi_index_container>инстанциации содержат один или несколько индексов, указанных во время компиляции. Каждый индекс позволяет получить доступ к элементам, содержащимся определенным образом. Например,упорядоченные индексыобеспечивают заданный интерфейс к элементам, тогда каксеквенированные индексыимитируют функциональность<std::list>.

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

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

  • Коппер,
  • - Двигатель,
  • - галактическое, деревенское, ГТД, дальнобойное устройство, КТО,
  • Установка,
  • , в том числе, и в том, что касается грузовых автомобилей, грузовых автомобилей, грузовых автомобилей, грузовых автомобилей, грузовых автомобилей и т.д.
  • стержневые знаки и знаки стержневого знака.
торможение два на торможение оргкомитета: торможение на оргкомитете, линчевание на оргкомитете< [34] >. Для того, чтобы снять напряжение, для того, чтобы снять напряжение, для того, чтобы изменить ситуацию. ii) налаживания взаимодействия между отделами и хештегами, а именно: налаживания взаимодействия и взаимодействия с контейнерами, и налаживания контактов с ними; налаживания взаимодействия с дисконтированными устройствами и наведением мостов, устройств< [35] >.
  • вставить элемент,
  • подсказанная вставка, в которой предлагается существующий элемент для повышения эффективности операции,
  • удаление элемента,
  • замена значения элемента, которая может вызвать перегруппировку этого элемента в одном или нескольких индексах, или запрет замены,
  • modification of an element, and its subsequent rearrangement/banning by the various indices. The last two primitives deserve some further explanation: in order to guarantee the invariants associated to each index (e.g. some definite ordering,) elements of a multi_index_container are not mutable. To overcome this restriction, indices expose member functions for replacement and modification which allow for the mutation of elements in a controlled fashion. Immutability of elements does not significantly impact the interfaces of ordered and hashed indices, as they are based upon those of associative and unordered associative containers, respectively, and these containers also have non-mutable elements; but it may come as a surprise when dealing with sequenced and random access indices, which are designed upon the functionality provided by std::list. [ORIG_END] -->

    Эти глобальные операции не подвергаются непосредственному воздействию пользователя, а, скорее, они обернуты соответствующим образом каждым индексом (например, упорядоченные индексы обеспечивают набор функций вставки, в то время как индексы секвенированного и случайного доступа имеют операции<push_back>и<push_front>). Повышаю. MultiIndex не создает особых условий на интерфейсе индексов, хотя каждый индекс удовлетворяет требованиям C++ для стандартных контейнеров в максимально возможной степени в концептуальных рамках библиотеки.

    Complexity signature

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

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

    • <c(n)>: копирование,
    • <i(n)>: вставка,
    • <h(n)>: подсказанная вставка,
    • <d(n)>: удаление,
    • <r(n)>: замена,
    • <m(n)>: модификация.

    Each function yields the complexity estimate of the contribution of the index to the corresponding global primitive. Let us consider an instantiation of multi_index_container with N indices labelled 0,...,N-1 whose complexity signatures are (ci,ii,hi,di,ri,mi); the insertion of an element in such a container is then of complexity O(i0(n)+···+iN-1(n)) where n is the number of elements. To abbreviate notation, we adopt the following definitions:
    • C(n)=c0(n)+···+cN-1(n),
    • I(n)=i0(n)+···+iN-1(n),
    • H(n)=h0(n)+···+hN-1(n),
    • D(n)=d0(n)+···+dN-1(n),
    • R(n)=r0(n)+···+rN-1(n),
    • M(n)=m0(n)+···+mN-1(n).
    For instance, consider a multi_index_container with two ordered indices, for which i(n)=log(n), and a sequenced index with i(n)=1 (constant time insertion). Insertion of an element into this multi_index_container is then of complexity
    O(I(n))=O(2*log(n)+1)=O(log(n)).

    Index specification

    Указатели индексов передаются в качестве аргументов для<multi_index_container>и предоставляют информацию, необходимую для включения соответствующих индексов. Будущие выпуски Boost. MultiIndex может обеспечивать спецификацию определяемых пользователем индексов. Между тем требования к индексному спецификатору остаются установленными. В настоящее время Boost.MultiIndex предоставляет указатели индексов

    ordered_uniqueиordered_non_uniqueдляупорядоченных индексов,
  • ranked_uniqueиranked_non_uniqueдляранжированных индексов,
  • hashed_uniqueиhashed_non_uniqueдляхешированных индексов,
  • sequencedдляпоследовательности индексов,
  • random_accessдляиндексов случайного доступа.
  • [ORIG_END] -->

    Header "boost/multi_index/indexed_by.hpp" synopsis

    namespace boost{
    namespace multi_index{
    template<typename T0,...,typename Tn>
    struct indexed_by;
    } // namespace boost::multi_index 
    } // namespace boost
    

    Class template indexed_by

    <indexed_by>является моделью<MPL Random Access Sequence>и<MPL Extensible Sequence>, предназначенной для использования для указания списка индексов на время компиляции в качестве<IndexSpecifierList><multi_index_container>.

    template<typename T0,...,typename Tn>
    struct indexed_by;
    

    Каждый предоставленный пользователем элемент<indexed_list>должен быть указателем индекса. По крайней мере, элемент должен быть предоставлен. Определено максимальное количество элементов последовательности<indexed_by>.

    Tags

    Теги являются обычными типами, используемыми в качестве мнемоники для индексов<multi_index_container>, как, например, в функции члена<get>. Каждый индекс не может иметь ни одного, одного или нескольких связанных тегов. Способ, которым теги присваиваются данному индексу, зависит от конкретного указателя индекса. Однако для удобства все индексы Boost. MultiIndex поддерживает тегирование через шаблон класса<tag>.

    Header "boost/multi_index/tag.hpp" synopsis

    namespace boost{
    namespace multi_index{
    template<typename T0,...,typename Tn>
    struct tag;
    } // namespace boost::multi_index 
    } // namespace boost
    

    Class template tag

    <tag>представляет собой конструкцию списка типов, используемую для указания последовательности тегов времени компиляции, которая должна быть назначена индексу во время инстанциации.

    template<typename T0,...,typename Tn>
    struct tag
    {
      typedef implementation defined type;
    };
    

    Элементы<tag>могут быть любого типа, хотя ожидается, что пользователь предоставит классам мнемонические имена. Дублирующие элементы не допускаются. Определено максимальное количество элементов<tag>инстанциации. Вложенная<type>является моделью<MPL Random Access Sequence>и<MPL Extensible Sequence>, содержащей типы<T0>, ...,<Tn>в том же порядке, что и указано.

    Indices provided by Boost.MultiIndex

    Key-based indices

    Индексы этого типа организованы вокругключей, полученных из элементов, как описано вссылке на извлечение ключей.

    Упорядоченные индексысортируют элементы на ключе и обеспечивают быстрый поиск капабилитов.
  • Ранжированные индексыпредставляют собой вариацию упорядоченных индексов, обеспечивающих дополнительные операции на основеранга, численного положения элемента в последовательности.
  • Индексы хешированияобеспечивают высокую эффективность доступа с помощью методов хеширования.
  • [ORIG_END] -->

    Other types

    Последовательности индексовпозволяют упорядочить элементы как в двунаправленном списке.
  • Индексы случайного доступаобеспечивают постоянный позиционный доступ во времени и свободный порядок элементов.
  • [ORIG_END] -->

    Index views

    Приведенная ниже концепция используется для перегруппировки объектов неключевых индексов. Учитывая индекс<i>типа<Index>,вид<i>представляет собой любой диапазон [<first>,<last>), где<first>и<last>являются входными итераторами, так что

    1. < [136] >< [136] >< [136] >] [< [137] >]
    2. < [140] >< [141] >< [142] >< [140] >< [141] >< [140] >< [141] >< [140] >.
    Обратите внимание, что вид относится к фактическим элементам<i>, а не к их копиям. Кроме того, считается, что видсвободен, если на его порядок прохождения не влияют изменения порядка прохождения<i>. Примерами свободных просмотров являются:Связанный типIteratorможет быть преобразован вconst Index::value_type&.
  • Каждый из элементовiпоявляется ровно один раз вfirst,last.
  • Note that the view refers to the actual elements of i, not to copies of them. Additionally, a view is said to be free if its traversal order is not affected by changes in the traversal order of i. Examples of free views are:
    • [c.begin(),c.end()], гдеc— любой контейнер эталонных оберток (отBoost.Ref) до элементовi, содержащих ровно одну ссылку на каждый элемент.
    • i'.begin(),i'.end(), гдеi'— любой индекс, принадлежащий тому жеmulti_index_container, что иi, за исключением самогоi.
    • Любой диапазон, который является перестановкой описанных выше, напримерc.rbegin(),c.rend(), или диапазоны, полученные от первого с помощьюpermutation_iteratorот Boost. Итератор.
    [ORIG_END] -->




    Пересмотрено 19 апреля 2015 года

    © Copyright 2003-2015 Joaquín M López Muñoz. Распространяется под лицензией Boost Software License, версия 1.0. (См. сопроводительный файлLICENSE_1_0.txtили копию на) http://www.boost.org/LICENSE_1_0.txt

    Статья Boost.MultiIndex Documentation - Index reference раздела Boost.MultiIndex Documentation - Reference может быть полезна для разработчиков на c++ и boost.




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



    :: Главная :: Boost.MultiIndex Documentation - Reference ::


    реклама


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

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