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

Boost.MultiIndex Documentation - Key extraction 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 Key extraction reference



Contents

Key Extractors

Классы извлечения ключей используются индексами на основе ключей для получения ключей индексации из элементов multi_index_container. Класс CopyConstructible и CopyAssignable KeyFromValue считается ключевым экстрактором из типа Type, если

  1. KeyFromValue:::result_type, то есть
  2. k1(ca)и , ,const KeyFromValue::result_type&,k1(ca),const KeyFromValue::result_type&,k1(ca),const KeyFromValue::result_type&
  3. k2k1k1(ca)k2k2(ca)]k2k2k2k2k2(ca)k2[k2(ca)]
для каждого k1, k2 типа const KeyFromValue и ca типа const Type&.Определяется типKeyFromValue::result_type,
  • k1(ca)определяется и возвращает значение, конвертируемое вconst KeyFromValue::result_type&,
  • Еслиk2является копиейk1,k1(ca)имеет то же значение, что иk2(ca),
  • for every k1, k2 of type const KeyFromValue, and ca of type const Type&. [ORIG_END] -->

    Кроме того, KeyFromValue является ключевым экстрактором read/write при соблюдении следующих дополнительных условий:

    1. k1(a), пунктk1(a), пунктk1(a), пунктKeyFromValue::result_type&, пунктKeyFromValue::result_type&
    2. const_cast(k1(a))[k1(const_cast(a))] [k1(const_cast(a))] [k1(const_cast(a))]]
    для каждого k1 типа const KeyFromValue и a типа Type&.k1(a)определяется и возвращает значение, конвертируемое вKeyFromValue::result_type&,
  • const_cast<const KeyFromValue::result_type&>(k1(a))имеет то же значение, что иk1(const_cast<const Type&>(a)),
  • for every k1 of type const KeyFromValue and a of type Type&. [ORIG_END] -->

    Повышаю. MultiIndex предоставляет шесть универсальных ключевых экстракторов:

    identity,
  • member,
  • const_mem_fun,
  • Мем_фун,
  • global_funи
  • composite_key.
  • [ORIG_END] -->

    Chained pointers

    Ключевые экстракторы, предоставленные Boost. Мультииндексы шаблонизируются в соответствии с типом Type и служат для извлечения ключей не только из объектов типа Type, но и из эталонных оберток, предоставляемых Boost.Ref и от цепных указателей до Type (или для эталонных оберток Type): a цепной указатель - это любой тип P, такой, что для объекта p или boost::reference_wrapper, OR, , то есть, цепные указатели являются произвольными композициями указателей Type& или boost: или boost: <439>>"boost/multi_index/key_extractors.hpp"

     Synopsis boostidentity>.boost>.boost50>mem_fun>.53>multi_index51> Этот заголовок включает в себя все ключевые экстракторы, предоставляемые Boost. MultiIndex.*pдает объект типаType&илиboost::reference_wrapper<Type>, ИЛИ
      
  • *pпривязывается кType,
  • that is, chained pointers are arbitrary compositions of pointer-like objects ultimately dereferencing to values of Type& or boost::reference_wrapper<Type>.

    Header "boost/multi_index/key_extractors.hpp" synopsis

    #include <boost/multi_index/identity.hpp>
    #include <boost/multi_index/member.hpp>
    #include <boost/multi_index/mem_fun.hpp>
    #include <boost/multi_index/global_fun.hpp>
    #include <boost/multi_index/composite_key.hpp>
    

    This header includes all the key extractors provided by Boost.MultiIndex. [ORIG_END] -->

    Header "boost/multi_index/identity.hpp" synopsis

    namespace boost{
    namespace multi_index{
    template<typename T> struct identity;
    } // namespace boost::multi_index 
    } // namespace boost
    

    Class template identity

    identity — это Key Extractor, который действует как функтор идентичности «ничего».

    template<typename Type>
    struct identity
    {
      typedef Type result_type;
      // only provided if const ChainedPtr& is not convertible to const Type&
      template<typename ChainedPtr> Type& operator()(const ChainedPtr& x)const;
      const Type& operator()(const Type& x)const; 
      Type&       operator()(Type& x)const; // only provided if Type is non-const
      // only provided if Type is non-const
      const Type& operator()(const reference_wrapper<const Type>& x)const; 
      // only provided if Type is const
      Type& operator()(
        const reference_wrapper<typename remove_const<Type>::type>& x)const; 
      Type& operator()(const reference_wrapper<Type>& x)const;
    };
    

    identity является моделью:

    Читать/писатьKey ExtractorизType,
  • Key Extractorизreference_wrapper<const Type>,
  • читать/писатьKey Extractorизreference_wrapper<Type>,
  • Key Extractorот любогоцепного указателядоconst Type,
  • Key Extractorот любогоцепного указателядоType.
  • [ORIG_END] -->

    identity members

    template<typename ChainedPtr> Type& operator()(const ChainedPtr& x)const;
    Requires: ChainedPtr is a chained pointer type to Type.
    Returns: a reference to the object chained-pointed to by x.
    const Type& operator()(const Type& x)const;
    Returns: x.
    Type& operator()(Type& x)const;
    Returns: x.
    const Type& operator()(const reference_wrapper<const Type>& x)const;
    Returns: x.get().
    Type& operator()(const reference_wrapper<typename remove_const<Type>::type>& x)const;
    Returns: x.get().
    Type& operator()(const reference_wrapper<Type>& x)const;
    Returns: x.get().

    Header "boost/multi_index/member.hpp" synopsis

    namespace boost{
    namespace multi_index{
    template<class Class,typename Type,Type Class::*PtrToMember>
    struct member;
    template<class Class,typename Type,std::size_t OffsetOfMember>
    struct member_offset; // deprecated
    #define BOOST_MULTI_INDEX_MEMBER(Class,Type,MemberName) implementation defined
    } // namespace boost::multi_index 
    } // namespace boost
    

    Class template member

    member - это Key Extractor, предназначенный для доступа к данному члену класса.

    template<class Class,typename Type,Type Class::*PtrToMember>
    struct member
    {
      typedef Type result_type;
      // only provided if const ChainedPtr& is not convertible to const Class&
      template<typename ChainedPtr> Type& operator()(const ChainedPtr& x)const;
      const Type& operator()(const Class& x)const;
      Type&       operator()(Class& x)const; // only provided if Type is non-const
      const Type& operator()(const reference_wrapper<const Class>& x)const;
      Type&       operator()(const reference_wrapper<Class>& x)const;
    };
    

    Аргумент шаблона PtrToMember определяет конкретный указатель Type Class::* для извлеченного члена. member является моделью:

    [ORIG_END] -->

    member members

    template<typename ChainedPtr> Type& operator()(const ChainedPtr& x)const;
    Requires: ChainedPtr is a chained pointer type to Type.
    Returns: a reference to the object chained-pointed to by x.
    const Type& operator()(const Class& x)const;
    Returns: x.*PtrToMember.
    Type& operator()(Class& x)const;
    Returns: x.*PtrToMember.
    const Type& operator()(const reference_wrapper<const Class>& x)const;
    Returns: x.get().*PtrToMember.
    Type& operator()(const reference_wrapper<Class>& x)const;
    Returns: x.get().*PtrToMember.

    Class template member_offset

    member_offset был разработан для преодоления ограничений некоторых устаревших компиляторов. Для получения дополнительной информации обратитесь к бывшей версии Boost.MultiIndex.

    Macro BOOST_MULTI_INDEX_MEMBER

    BOOST_MULTI_INDEX_MEMBER(Class,Type,MemberName)
    

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

    Header "boost/multi_index/mem_fun.hpp" synopsis

    namespace boost{
    namespace multi_index{
    template<class Class,typename Type,Type (Class::*PtrToMemberFunction)()const>
    struct const_mem_fun;
    template<class Class,typename Type,Type (Class::*PtrToMemberFunction)()>
    struct mem_fun;
    template<
      class Class,typename Type,
      typename PtrToMemberFunctionType,PtrToMemberFunctionType PtrToMemberFunction
    >
    struct const_mem_fun_explicit; // deprecated
    template<
      class Class,typename Type,
      typename PtrToMemberFunctionType,PtrToMemberFunctionType PtrToMemberFunction
    >
    struct mem_fun_explicit;       // deprecated
    #define BOOST_MULTI_INDEX_CONST_MEM_FUN(Class,Type,MemberFunName) \
    implementation defined
    #define BOOST_MULTI_INDEX_MEM_FUN(Class,Type,MemberFunName) \
    implementation defined
    } // namespace boost::multi_index 
    } // namespace boost
    

    Class template const_mem_fun

    const_mem_fun - это Ключевой экстрактор, возвращающийся в качестве ключа в результате вызова данной постоянной функции члена класса.

    template<class Class,typename Type,Type (Class::*PtrToMemberFunction)()const>
    struct const_mem_fun
    {
      typedef typename remove_reference<Type>::type result_type;
      // only provided if const ChainedPtr& is not convertible to const Class&
      template<typename ChainedPtr> Type operator()(const ChainedPtr& x)const;
      Type operator()(const Class& x)const;
      Type operator()(const reference_wrapper<const Class>& x)const;
      Type operator()(const reference_wrapper<Class>& x)const;
    };
    

    Аргумент шаблона PtrToMemberFunction определяет конкретный Type (класс:::*PtrToMemberFunction)()const указатель на функцию постоянного члена, используемую в извлечении. const_mem_fun является моделью:

    Key ExtractorизClass,
  • Key Extractorизreference_wrapper<const Class>,
  • Key Extractorизreference_wrapper<Class>,
  • Key Extractorот любогоцепного указателядоconst Class,
  • Key Extractorот любогоцепного указателядоClass.
  • [ORIG_END] -->

    const_mem_fun members

    template<typename ChainedPtr> Type operator()(const ChainedPtr& x)const;
    Requires: ChainedPtr is a chained pointer type to Type.
    Returns: (y.*PtrToMemberFunction)(), where y is the object chained-pointed to by x.
    Type operator()(const Class& x)const;
    Returns: (x.*PtrToMemberFunction)().
    Type operator()(const reference_wrapper<const Class>& x)const;
    Returns: (x.get().*PtrToMemberFunction)().
    Type operator()(const reference_wrapper<Class>& x)const;
    Returns: (x.get().*PtrToMemberFunction)().

    Class template mem_fun

    mem_fun представляет собой Key Extractor возвращающийся в качестве ключа в результате вызова данной функции члена класса.

    template<class Class,typename Type,Type (Class::*PtrToMemberFunction)()>
    struct mem_fun
    {
      typedef typename remove_reference<Type>::type result_type;
      // only provided if ChainedPtr& is not convertible to Class&
      template<typename ChainedPtr> Type operator()(const ChainedPtr& x)const;
      Type operator()(Class& x)const;
      Type operator()(const reference_wrapper<Class>& x)const;
    };
    

    Аргумент шаблона PtrToMemberFunction определяет конкретный Type (класс:::*PtrToMemberFunction)() указатель на функцию члена, используемую в извлечении. mem_fun представляет собой модель:

    Key Extractorизreference_wrapper<Class>,
  • Key Extractorот любогоцепного указателядоClass.
  • [ORIG_END] -->

    mem_fun members

    template<typename ChainedPtr> Type operator()(const ChainedPtr& x)const;
    Requires: ChainedPtr is a chained pointer type to Type.
    Returns: (y.*PtrToMemberFunction)(), where y is the object chained-pointed to by x.
    Type operator()(Class& x)const;
    Returns: (x.*PtrToMemberFunction)().
    Type operator()(const reference_wrapper<Class>& x)const;
    Returns: (x.get().*PtrToMemberFunction)().

    Class templates const_mem_fun_explicit and mem_fun_explicit

    Эти экстракторы были предоставлены в качестве обходного пути для MSVC++. 6.0, а теперь обесценились. Для получения дополнительной информации обратитесь к бывшей версии Boost.MultiIndex.

    Macros BOOST_MULTI_INDEX_CONST_MEM_FUN and BOOST_MULTI_INDEX_MEM_FUN

    BOOST_MULTI_INDEX_CONST_MEM_FUN(Class,Type,MemberFunName)
    BOOST_MULTI_INDEX_MEM_FUN(Class,Type,MemberFunName)
    

    Переносимость макросов для использования const_mem_fun и mem_fun. Хотя в современных компиляторах больше нет необходимости, некоторые пользователи все же могут прибегнуть к ним, поскольку они обеспечивают немного более краткий синтаксис.

    Header "boost/multi_index/global_fun.hpp" synopsis

    namespace boost{
    namespace multi_index{
    template<class Value,typename Type,Type (*PtrToFunction)(Value)>
    struct global_fun;
    } // namespace boost::multi_index 
    } // namespace boost
    

    Class template global_fun

    global_fun представляет собой Key Extractor, основанный на заданной глобальной или статической функции члена, принимающей базовый тип в качестве аргумента и возвращающей связанный ключ.

    template<class Value,typename Type,Type (*PtrToFunction)(Value)>
    struct global_fun
    {
      typedef typename remove_reference<Type>::type result_type;
      // Only provided under the following circumstances:
      //   - If Value is a reference to a constant type, only provided
      //     when const ChainedPtr& is not convertible to Value;
      //   - if Value is a reference to a non-const type, only provided
      //     when ChainedPtr& is not convertible to Value;
      //   - else, only provided when const ChainedPtr& is not
      //     convertible to const Value&.
      Type operator()(const ChainedPtr& x)const;
      
      // only provided if Value is a reference type
      Type operator()(Value x)const;
      // only provided if Value is not a reference type
      Type operator()(const Value& x)const;
      // only provided if Value is not a reference type
      Type operator()(const reference_wrapper<const Value>& x)const;
      // only provided if Value is a reference type
      Type operator()(
        const reference_wrapper<
          remove_reference<Value>::type>& x)const;
      // only provided if Value is not a reference type or is
      // a reference to a constant type
      Type operator()(
        const reference_wrapper<
          typename remove_const<
            typename remove_reference<Value>::type>::type>& x)const;
    };
    

    PtrToFunction определяет конкретную функцию, используемую для извлечения ключа типа Type из некоторого BaseType. global_fun поддерживает следующие подписи функций:

    • Type f(BaseType)ValueявляетсяBaseType,
    • Type f(const BaseType&)Const BaseType&,
    • Type f(BaseType&)ValueявляетсяBaseType&.
    global_fun< Type,Value,PtrToFunction> представляет собой модель: Type f(BaseType)ValueявляетсяBaseType,
  • Type f(const BaseType&)Valueconst BaseType&,
  • Type f(BaseType&)ValueBaseType&.
  • global_fun<Type,Value,PtrToFunction> is a model of: When Value is BaseType or const BaseType&, global_fun<Type,Value,PtrToFunction> is also a model of: [ORIG_END] -->

    global_fun members

    template<typename ChainedPtr> Type operator()(const ChainedPtr& x)const;
    Requires: ChainedPtr is a chained pointer type to Value.
    Returns: PtrToFunction)(y), where y is the object chained-pointed to by x.
    Type operator()(Value x)const;
    Returns: PtrToFunction(x).
    Type operator()(const Value& x)const;
    Returns: PtrToFunction(x).
    Type operator()(const reference_wrapper<const Value>& x)const;
    Returns: PtrToFunction(x.get()).
    Type operator()(
      const reference_wrapper<remove_reference<Value>::type>& x)const;
    Returns: PtrToFunction(x.get()).
    Type operator()(
      const reference_wrapper<
        typename remove_const<
          typename remove_reference<Value>::type>::type>& x)const;
    Returns: PtrToFunction(x.get()).

    Header "boost/multi_index/composite_key.hpp" synopsis

    namespace boost{
    namespace multi_index{
    template<typename Value,typename KeyFromValue0,...,typename KeyFromValuen>
    struct composite_key;
    template<typename CompositeKey>
    struct composite_key_result;
      
    // comparison operators for composite_key_result:
    // OP is any of ==,<,!=,>,>=,<=
    template<typename CompositeKey1,typename CompositeKey2>
    bool operator OP(
      const composite_key_result<CompositeKey1>& x,
      const composite_key_result<CompositeKey2>& y);
    template<typename CompositeKey,typename... Values>
    bool operator OP(
      const composite_key_result<CompositeKey>& x,
      const std::tuple<Values...>& y);
    template<typename CompositeKey,typename... Values>
    bool operator OP(
      const std::tuple<Values...>& x,
      const composite_key_result<CompositeKey>& y);
    template<typename CompositeKey,typename Value0,...,typename Valuen>
    bool operator OP(
      const composite_key_result<CompositeKey>& x,
      const boost::tuple<Value0,...,Valuen>& y);
    template<typename Value0,...,typename Valuen,typename CompositeKey>
    bool operator OP(
      const boost::tuple<Value0,...,Valuen>& x,
      const composite_key_result<CompositeKey>& y);
    // equality functors:
    template<typename Pred0,...,typename Predn>
    struct composite_key_equal_to;
      
    template<typename CompositeKeyResult>
    struct composite_key_result_equal_to; // deprecated
    // comparison functors:
    template<typename Compare0,...,typename Comparen>
    struct composite_key_compare;
      
    template<typename CompositeKeyResult>
    struct composite_key_result_less;     // deprecated
    template<typename CompositeKeyResult>
    struct composite_key_result_greater;  // deprecated
    // hash functors:
    template<typename Hash0,...,typename Hashn>
    struct composite_key_hash;
      
    template<typename CompositeKeyResult>
    struct composite_key_result_hash;     // deprecated
    } // namespace boost::multi_index
    } // namespace boost
    // specializations of external functors for composite_key_result:
    namespace std{
    template<typename CompositeKey>
    struct equal_to<boost::multi_index::composite_key_result<CompositeKey> >;
    template<typename CompositeKey>
    struct less<boost::multi_index::composite_key_result<CompositeKey> >;
    template<typename CompositeKey>
    struct greater<boost::multi_index::composite_key_result<CompositeKey> >;
    } // namespace std
    namespace boost{
    template<typename CompositeKey>
    struct hash<boost::multi_index::composite_key_result<CompositeKey> >;
    } // namespace boost
    

    Class template composite_key

    composite_key представляет собой Key Extractor возвращающий комбинированное значение нескольких ключевых экстракторов, тип которых указан во время компиляции. Возвращенный объект имеет тип composite_key_result.

    template<typename Value,typename KeyFromValue0,...,typename KeyFromValuen>
    struct composite_key
    {
      typedef boost::tuple<KeyFromValue0,...,KeyFromValuen> key_extractor_tuple;
      typedef Value                                         value_type;
      typedef composite_key_result<composite_key>           result_type;
      composite_key(
        const KeyFromValue0& k0=KeyFromValue0(),
        ...
        const KeyFromValuen& kn=KeyFromValuen());
      composite_key(const key_extractor_tuple& x);
      const key_extractor_tuple& key_extractors()const;
      key_extractor_tuple&       key_extractors()
      // only provided if const ChainedPtr& is not convertible to const value_type&
      template<typename ChainedPtr>
      result_type operator()(const ChainedPtr& x)const;
      
      result_type operator()(const value_type& x)const;
      result_type operator()(const reference_wrapper<const value_type>& x)const;
      result_type operator()(const reference_wrapper<value_type>& x)const;
    };
    

    KeyFromValue0, ..., KeyFromValuen представляют собой типы ключевых экстракторов, объединенных в композитный ключ. Каждый из этих типов должен быть Ключевой Исследователь от Ценность. По крайней мере, должен быть обеспечен ключевой экстрактор. Определено максимальное количество ключевых экстракторов инстанциации composite_key. composite_key внутренне хранит объект каждого типа составного ключа. composite_key< Ценность,KeyFrom Value0, ... KeyFromValuen> представляет собой модель:

    [ORIG_END] -->

    composite_key members

    composite_key(
      const KeyFromValue0& k0=KeyFromValue0(),
      ...
      const KeyFromValuen& kn=KeyFromValuen());
    Effects: Constructs a composite_key that stores copies of the key extractor objects supplied.
    composite_key(const key_extractor_tuple& x);
    Effects: Constructs a composite_key that stores copies of the key extractor objects supplied in x.
    const key_extractor_tuple& key_extractors()const;
    Returns: a constant reference to a tuple holding the key extractors internally stored by the composite_key.
    key_extractor_tuple& key_extractors();
    Returns: a reference to a tuple holding the key extractors internally stored by the composite_key.
    template<typename ChainedPtr>
    result_type operator()(const ChainedPtr& x)const;
    Requires: ChainedPtr is a chained pointer type to result_type.
    Returns: a result_type object dependent on *this and y, where y is the object chained-pointed to by x.
    result_type operator()(const value_type& x)const;
    Returns: a result_type object dependent on *this and x.
    result_type operator()(const reference_wrapper<const value_type>& x)const;
    Returns: a result_type object dependent on *this and x.get().
    result_type operator()(const reference_wrapper<value_type>& x)const;
    Returns: a result_type object dependent on *this and x.get().

    Class template composite_key_result

    Это непрозрачный тип, возвращаемый инстанциациями composite_key в качестве извлеченного ключа.

    template<typename CompositeKey>
    struct composite_key_result
    {
      no public interface available
    };
    // comparison:
      
    // OP is any of ==,<,!=,>,>=,<=
    template<typename CompositeKey1,typename CompositeKey2>
    bool operator OP(
      const composite_key_result<CompositeKey1>& x,
      const composite_key_result<CompositeKey2>& y);
    template<typename CompositeKey,typename... Values>
    bool operator OP(
      const composite_key_result<CompositeKey>& x,
      const std::tuple<Values...>& y);
    template<typename CompositeKey,typename... Values>
    bool operator OP(
      const std::tuple<Values...>& x,
      const composite_key_result<CompositeKey>& y);
    template<typename CompositeKey,typename Value0,...,typename Valuen>
    bool operator OP(
      const composite_key_result<CompositeKey>& x,
      const boost::tuple<Value0,...,Valuen>& y);
    template<typename Value0,...,typename Valuen,typename CompositeKey>
    bool operator OP(
      const boost::tuple<Value0,...,Valuen>& x,
      const composite_key_result<CompositeKey>& y);
    
    CompositeKey is the composite_key instantiation to which the composite_key_result type is associated. Objects of type composite_key_result returned by a composite key must be always treated as temporary, i.e. they should not be stored or copied. composite_key_result is not guaranteed to be DefaultConstructible or CopyAssignable. Every object of type composite_key_result<CompositeKey> is internally associated to the CompositeKey from which it is returned and the object of type CompositeKey::value_type to which the composite key was applied.

    Notation

    Учитывая x типа composite_key_result, мы используем следующую запись:

    • ck(x)CompositeKeyОбъект, скрепленныйx,
    • тип, ki(x)key_extractors().get, то есть, является i,
    • i(x)(v)(x)), [скрыто],v(x)i,
    • >длина (x),ystd::tupleboost::tuple::tuple,
      • длина(y),
      ck(x)являетсяCompositeKeyобъектом, связанным сx,
    • v(x)является объектом типаCompositeKey::value_type, связанным сx,
    • ki(x) = ck(x).key_extractors().get<i>(), то естьi— ключевой экстракторck(x),
    • xi= ki(x)(v(x)), то есть ключ, извлеченный изv(x)i— ключ-экстрактор,
    • length(x)— число ключевых экстракторовck(x).
    Also, if y is an std::tuple or boost::tuple of values, we define:
    • yi=get<i>(y),
    • length(y)— число элементовy.
    [ORIG_END] -->

    Comparison operators

    template<typename CompositeKey1,typename CompositeKey2>
    bool operator==(
      const composite_key_result<CompositeKey1>& x,
      const composite_key_result<CompositeKey2>& y);
    template<typename CompositeKey,typename... Values>
    bool operator==(
      const composite_key_result<CompositeKey>& x,
      const std::tuple<Values...>& y);
    template<typename CompositeKey,typename... Values>
    bool operator==(
      const std::tuple<Values...>& x,
      const composite_key_result<CompositeKey>& y);
    template<typename CompositeKey,typename Value0,...,typename Valuen>
    bool operator==(
      const composite_key_result<CompositeKey>& x,
      const boost::tuple<Value0,...,Valuen>& y);
    template<typename Value0,...,typename Valuen,typename CompositeKey>
    bool operator==(
      const boost::tuple<Value0,...,Valuen>& x,
      const composite_key_result<CompositeKey>& y);
    Requires: length(x)==length(y). The expression xi==yi is valid for all i in [0,length(x)).
    Returns: true if and only if
    xi==yi for all i in [0,length(x)).
    Complexity: No more key extraction operations and comparisons are performed than those necessary for the evaluation of the expression above, starting at i==0. The evaluation is short-circuited as soon as the result is determined to be false.
    template<typename CompositeKey1,typename CompositeKey2>
    bool operator<(
      const composite_key_result<CompositeKey1>& x,
      const composite_key_result<CompositeKey2>& y);
    template<typename CompositeKey,typename... Values>
    bool operator<(
      const composite_key_result<CompositeKey>& x,
      const std::tuple<Values...>& y);
    template<typename CompositeKey,typename... Values>
    bool operator<(
      const std::tuple<Values...>& x,
      const composite_key_result<CompositeKey>& y);
    template<typename CompositeKey,typename Value0,...,typename Valuen>
    bool operator<(
      const composite_key_result<CompositeKey>& x,
      const boost::tuple<Value0,...,Valuen>& y);
    template<typename Value0,...,typename Valuen,typename CompositeKey>
    bool operator<(
      const boost::tuple<Value0,...,Valuen>& x,
      const composite_key_result<CompositeKey>& y);
    Requires: The expressions xi<yi and yi<xi are valid for all i in [0,min(length(x),length(y))).
    Returns: true if and only if there exists some j in the range [0,min(length(x),length(y))) such that
    !(xi<yi) && !(yi<xi) for all i in [0,j),
      xj<yj.
    Complexity: No more key extraction operations and comparisons are performed than those necessary for the evaluation of the expression above, starting at i==0. The evaluation is short-circuited as soon as the result is determined to be false.
    template<typename CompositeKey1,typename CompositeKey2>
    bool operator OP(
      const composite_key_result<CompositeKey1>& x,
      const composite_key_result<CompositeKey2>& y);
    template<typename CompositeKey,typename... Values>
    bool operator OP(
      const composite_key_result<CompositeKey>& x,
      const std::tuple<Values...>& y);
    template<typename CompositeKey,typename... Values>
    bool operator OP(
      const std::tuple<Values...>& x,
      const composite_key_result<CompositeKey>& y);
    template<typename CompositeKey,typename Value0,...,typename Valuen>
    bool operator OP(
      const composite_key_result<CompositeKey>& x,
      const boost::tuple<Value0,...,Valuen>& y);
    template<typename Value0,...,typename Valuen,typename CompositeKey>
    bool operator OP(
      const boost::tuple<Value0,...,Valuen>& x,
      const composite_key_result<CompositeKey>& y);

    (OP - любой из !=, >, >=, <=.)

    Requires: The expressions given below are valid (for the particular OP considered.)
    Returns: true if and only if
    !(x==y) (OP is !=),
      y< x  (OP is ),
    !(x< y) (OP is >=),
    !(y< x) (OP is <=).

    Equality

    Class template composite_key_equal_to

    composite_key_equal_to тесты на равенство между composite_key_result и между этими и наборами значений, используя внутренне сохраненный набор элементарных предикатов равенства.

    template<typename Pred0,...,typename Predn>
    struct composite_key_equal_to
    {
      typedef boost::tuple<Pred0,...,Predn> key_eq_tuple;
      composite_key_equal_to(
        const Pred0& p0=Pred0(),
        ...
        const Predn& pn=Predn());
      composite_key_equal_to(const key_eq_tuple& x);
      const key_eq_tuple& key_eqs()const;
      key_eq_tuple&       key_eqs();
      template<typename CompositeKey1,typename CompositeKey2>
      bool operator()(
        const composite_key_result<CompositeKey1> & x,
        const composite_key_result<CompositeKey2> & y)const;
      
      template<typename CompositeKey,typename... Values>
      bool operator()(
        const composite_key_result<CompositeKey>& x,
        const std::tuple<Values...>& y)const;
      template<typename CompositeKey,typename... Values>
      bool operator()(
        const std::tuple<Values...>& x,
        const composite_key_result<CompositeKey>& y)const;
      template<typename CompositeKey,typename Value0,...,typename Valuen>
      bool operator()(
        const composite_key_result<CompositeKey>& x,
        const boost::tuple<Value0,...,Valuen>& y)const;
      template<typename Value0,...,typename Valuen,typename CompositeKey>
      bool operator()(
        const boost::tuple<Value0,...,Valuen>& x,
        const composite_key_result<CompositeKey>& y)const;
    };
    

    Pred0, ..., Predn представляют собой типы двоичных предикатов равенства, сохраненных composite_key_equal_to. Каждый из этих предикатов должен быть CopyConstructible и CopyAssignable. По крайней мере, должен быть установлен принцип равенства. Определено максимальное число предикатов равенства для инстанциации composite_key_equal_to. composite_key_equal_to является CopyConstructible и CopyAssignable. Это также DefaultConstructible, если каждый Predi в свою очередь является DefaultConstructible.

    Обратите внимание, что формально не требуется, чтобы типы Predi вели себя как предикаты равенства каким-либо определенным образом. Однако семантика composite_key_equal_to хорошо определена, если это так, как объясняется в разделе семантика composite_key_result.

    Notation

    В дальнейшем мы используем ту же нотацию , введенную для composite_key_result.

    composite_key_equal_to

    composite_key_equal_to(
      const Pred0& p0=Pred0(),
      ...
      const Predn& pn=Predn());
    Эффекты: Построение composite_key_equal_to, в котором хранятся копии предоставленных предикатов равенства.
    composite_key_equal_to(const key_eq_tuple& x);
    Построение composite_key_equal_to, в котором хранятся копии объектов предикатов равенства, поставляемых в x.
    const key_eq_tuple& key_eqs()const;
    Returns:
    key_eq_tuple& key_eqs();
    Returns: ссылка на кортеж, содержащий объекты предикатов равенства, внутренне хранящиеся в composite_key_equal_to.
    template
    bool operator()(
      const composite_key_result & x,
      const composite_key_result &y)const;
    template
    Bool operator()(
      const) composite_key_result& x,
      const std::tuple&y)const;
    template
    Bool operator()(
      const) std::tuple& x,
      const composite_key_result&y)const;
    template
    bool operator()(
      const) composite_key_result& x,
      const boost::tuple&y)const;
    template
    bool operator()(
      const boost::tuple& x,
      const composite_key_result&y)const;
    Требуется: длина(x)==длина(y). Выражения key_eqs(.get()(xi) и key_eqs(.get()()()()()(yi,xi) действительны для всех i в [0, длина(x)).
    Возврат:True если и только
    key_eqs(.get()(xi,yi) для всех i в [0, длина(x)).
    Комплексность: Не выполняется больше операций извлечения ключей и сравнений, чем те, которые необходимы для оценки выражения выше, начиная с i==0. Оценка выполняется с коротким замыканием, как только результат определен как ложный .

    Шаблон класса composite_key_result_equal_to

    Устаревший. Используйте std::equal_to.

    Specialization of std::equal_to for composite_key results

    std::equal_to, с CompositeKeyResult инстанциацией composite_key_result, ведет себя как конкретизация composite_key_equal_to, где все предоставленные предикаты сравнения являются инстанциациями std::equal_to.

    namespace std{
    template<typename CompositeKey>
    struct equal_to<boost::multi_index::composite_key_result<CompositeKey> >
    {
      typedef 
        boost::multi_index::composite_key_result<
          CompositeKey>                           first_argument_type;
      typedef first_argument_type                 second_argument_type;
      typedef bool                                result_type;
      template<typename CompositeKey1,typename CompositeKey2>
      bool operator()(
        const boost::multi_index::composite_key_result<CompositeKey1> & x,
        const boost::multi_index::composite_key_result<CompositeKey2> & y)const;
      
      template<typename CompositeKey,typename... Values>
      bool operator()(
        const boost::multi_index::composite_key_result<CompositeKey>& x,
        const std::tuple<Values...>& y)const;
      template<typename CompositeKey,typename... Values>
      bool operator()(
        const std::tuple<Values...>& x,
        const boost::multi_index::composite_key_result<CompositeKey>& y)const;
      template<typename CompositeKey,typename Value0,...,typename Valuen>
      bool operator()(
        const boost::multi_index::composite_key_result<CompositeKey>& x,
        const boost::tuple<Value0,...,Valuen>& y)const;
      template<typename Value0,...,typename Valuen,typename CompositeKey>
      bool operator()(
        const boost::tuple<Value0,...,Valuen>& x,
        const boost::multi_index::composite_key_result<CompositeKey>& y)const;
    };
    } // namespace std
    

    CompositeKeyResult должен представлять собой инстанциацию composite_key_result для некоторого типа composite_key. std::equal:to::operator() эквивалентен composite_key_equal_to::operator():, принимая

    Predi = std::equal_to для всех i = 0,...,n

    В дополнение к требованиям Predi, предъявляемым composite_key_equal_to, каждый из этих типов должен быть DefaultConstructible. std::equal_to - DefaultConstructible, CopyConstructible и CopyAssignable.

    Comparison

    Class template composite_key_compare

    composite_key_compare сравнивает composite_key_result с наборами значений, используя внутренне сохраненный набор элементарных сравнительных предикатов.

    template<typename Compare0,...,typename Comparen>
    struct composite_key_compare
    {
      typedef boost::tuple<Compare0,...,Comparen> key_comp_tuple;
      composite_key_compare(
        const Compare0& c0=Compare0(),
        ...
        const Comparen& cn=Comparen());
      composite_key_compare(const key_comp_tuple& x);
      const key_comp_tuple& key_comps()const;
      key_comp_tuple&       key_comps();
      template<typename CompositeKey1,typename CompositeKey2>
      bool operator()(
        const composite_key_result<CompositeKey1> & x,
        const composite_key_result<CompositeKey2> & y)const;
      
      template<typename CompositeKey,typename... Values>
      bool operator()(
        const composite_key_result<CompositeKey>& x,
        const std::tuple<Values...>& y)const;
      template<typename CompositeKey,typename... Values>
      bool operator()(
        const std::tuple<Values...>& x,
        const composite_key_result<CompositeKey>& y)const;
      template<typename CompositeKey,typename Value0,...,typename Valuen>
      bool operator()(
        const composite_key_result<CompositeKey>& x,
        const boost::tuple<Value0,...,Valuen>& y)const;
      template<typename Value0,...,typename Valuen,typename CompositeKey>
      bool operator()(
        const boost::tuple<Value0,...,Valuen>& x,
        const composite_key_result<CompositeKey>& y)const;
      template<typename CompositeKey,typename Value>
      bool operator()(
        const composite_key_result<CompositeKey>& x,const Value& y)const;
      template<typename Value,typename CompositeKey>
      bool operator()(
        const Value& x,const composite_key_result<CompositeKey>& y)const;
    };
    

    Compare0, ..., Comparen представляют собой типы сравнительных бинарных предикатов, сохраненных composite_key_compare. Каждый из этих предикатов должен быть CopyConstructible и CopyAssignable. По крайней мере, должен быть приведен сравнительный предикат. Определено максимальное количество сравнительных предикатов инстанциации composite_key_compare. composite_key_compare является CopyConstructible и CopyAssignable. Это также DefaultConstructible, если каждый Comparei в свою очередь является DefaultConstructible.

    Обратите внимание, что формально не требуется, чтобы типы Comparei вели себя как предикаты сравнения каким-либо определенным образом. Однако семантика composite_key_compare хорошо определена, если это так, как объясняется в разделе семантика composite_key_result.

    Notation

    В дальнейшем мы используем ту же самую нотацию , введенную для composite_key_result.

    composite_key_compare

    composite_key_compare(
      const Compare0& c0=Compare0(),
      const Comparen& cn=Comparen());
    Эффекты: Построение composite_key_compare, в котором хранятся копии предоставленных сравнительных предикатов.
    composite_key_compare(const key_comp_tuple& x);
    Построение composite_key_compare, в котором хранятся копии объектов предикатов сравнения, поставляемых в x.
    const key_comp_tuple& key_comps()const;
    Returns:
    key_comp_tuple& key_comps();
    Returns: ссылка на кортеж, содержащий объекты предикатов сравнения, внутренне хранящиеся в composite_key_compare.
    template
    bool operator()(
      const composite_key_result & x,
      const composite_key_result &y)const;
    template
    bool operator()(
      const composite_key_result& x,
      const std::tuple&y)const;
    template
    bool operator()(
      const std::tuple& x,
      const composite_key_result&y)const;
    template
    bool operator()(
      const) composite_key_result& x,
      const boost::tuple&y)const;
    template
    bool operator()(
      const boost::tuple& x,
      const composite_key_result&y)const;
    Требуется: Выражения key_comps().get()(xi) и key_comps().get()()()(yi,xi) действительны для всех ii,xj,y
    Комплексность:[2>[0,min(length(x),length(y)), так что
    !key_comps().get()(xi) &&!key_comps()&&!key_comps() для всех ii,xj.
    Комплексность: Не выполняется больше операций извлечения ключей и сравнений, чем те, которые необходимы для оценки выражения выше, начиная с i==0. Оценка замыкается, как только результат определен как ложный .
    шаблон
    bool operator()(
      const) Композитный_key_resulty)const;
     возврат оператор:буст::буст::кроф::буст:буст:Классовый шаблон composite_key_result_less;<1 Используйте std::less.

    Class template composite_key_result_greater

    Унизительно. Используйте std:: greater.

    Specialization of std::less for composite_key results

    std::less, с CompositeKeyResult инстанциацией composite_key_result, ведет себя как конкретизация composite_key_compare, где все поставляемые сравнительные предикаты представляют собой инстанциации std::less.

    namespace std{
    template<typename CompositeKey>
    struct less<boost::multi_index::composite_key_result<CompositeKey> >
    {
      typedef
        boost::multi_index::composite_key_result<
          CompositeKey>                           first_argument_type;
      typedef first_argument_type                 second_argument_type;
      typedef bool                                result_type;
      template<typename CompositeKey1,typename CompositeKey2>
      bool operator()(
        const boost::multi_index::composite_key_result<CompositeKey1> & x,
        const boost::multi_index::composite_key_result<CompositeKey2> & y)const;
      
      template<typename CompositeKey,typename... Values>
      bool operator()(
        const boost::multi_index::composite_key_result<CompositeKey>& x,
        const std::tuple<Values...>& y)const;
      template<typename CompositeKey,typename... Values>
      bool operator()(
        const std::tuple<Values...>& x,
        const boost::multi_index::composite_key_result<CompositeKey>& y)const;
      template<typename CompositeKey,typename Value0,...,typename Valuen>
      bool operator()(
        const boost::multi_index::composite_key_result<CompositeKey>& x,
        const boost::tuple<Value0,...,Valuen>& y)const;
      template<typename Value0,...,typename Valuen,typename CompositeKey>
      bool operator()(
        const boost::tuple<Value0,...,Valuen>& x,
        const boost::multi_index::composite_key_result<CompositeKey>& y)const;
      template<typename CompositeKey,typename Value>
      bool operator()(
        const boost::multi_index::composite_key_result<CompositeKey>& x,
        const Value& y)const;
      template<typename Value,typename CompositeKey>
      bool operator()(
        const Value& x,
        const boost::multi_index::composite_key_result<CompositeKey>& y)const;
    };
    } // namespace std
    

    CompositeKeyResult должен представлять собой инстанциацию composite_key_result для некоторого типа composite_key. std::less::operator() эквивалентен composite_key_compare::operator(), принимая

    Comparei = std::less для всех i = 0,...,n

    В дополнение к требованиям Comparei, предъявляемым composite_key_compare, каждый из этих типов должен быть DefaultConstructible. std::less является CopyConstructible, CopyConstructible и CopyAssignable.

    Specialization of std::greater for composite_key results

    std:: greater, с CompositeKeyResult инстанциацией composite_key_result, ведет себя как конкретизация composite_key_compare, где все поставляемые сравнительные предикаты представляют собой инстанциации std:: greater.

    namespace std{
    template<typename CompositeKey>
    struct greater<boost::multi_index::composite_key_result<CompositeKey> >
    {
      typedef
        boost::multi_index::composite_key_result<
          CompositeKey>                           first_argument_type;
      typedef first_argument_type                 second_argument_type;
      typedef bool                                result_type;
      template<typename CompositeKey1,typename CompositeKey2>
      bool operator()(
        const boost::multi_index::composite_key_result<CompositeKey1> & x,
        const boost::multi_index::composite_key_result<CompositeKey2> & y)const;
      
      template<typename CompositeKey,typename... Values>
      bool operator()(
        const boost::multi_index::composite_key_result<CompositeKey>& x,
        const std::tuple<Values...>& y)const;
      template<typename CompositeKey,typename... Values>
      bool operator()(
        const std::tuple<Values...>& x,
        const boost::multi_index::composite_key_result<CompositeKey>& y)const;
      template<typename CompositeKey,typename Value0,...,typename Valuen>
      bool operator()(
        const boost::multi_index::composite_key_result<CompositeKey>& x,
        const boost::tuple<Value0,...,Valuen>& y)const;
      template<typename Value0,...,typename Valuen,typename CompositeKey>
      bool operator()(
        const boost::tuple<Value0,...,Valuen>& x,
        const boost::multi_index::composite_key_result<CompositeKey>& y)const;
      template<typename CompositeKey,typename Value>
      bool operator()(
        const boost::multi_index::composite_key_result<CompositeKey>& x,
        const Value& y)const;
      template<typename Value,typename CompositeKey>
      bool operator()(
        const Value& x,
        const boost::multi_index::composite_key_result<CompositeKey>& y)const;
    };
    } // namespace std
    

    CompositeKeyResult должен представлять собой инстанциацию composite_key_result для некоторого типа composite_key. std:: greater::operator() эквивалентен composite_key_compare::operator():, принимая

    Comparei = std:: greater для всех i = 0,...,n.

    В дополнение к требованиям Comparei, предъявляемым composite_key_compare, каждый из этих типов должен быть DefaultConstructible. std:: greater - CopyConstructible, CopyConstructible и CopyAssignable.

    Hashing

    Class template composite_key_hash

    composite_key_hash производит значения хэша для composite_key_result инстанциаций на основе набора элементарных хеш-функторов.

    template<typename Hash0,...,typename Hashn>
    struct composite_key_hash
    {
      typedef boost::tuple<Hash0,...,Hashn> key_hasher_tuple;
      composite_key_hash(
        const Hash0& h0=Hash0(),
        ...
        const Hashn& hn=Hashn());
      composite_key_hash(const key_hasher_tuple& x);
      const key_hasher_tuple& key_hash_functions()const;
      key_hasher_tuple&       key_hash_functions();
      template<typename CompositeKey>
      std::size_t operator()(
        const composite_key_result<CompositeKey>& x)const;
      
      template<typename... Values>
      std::size_t operator()(
        const std::tuple<Values...>& x)const;
      template<typename Value0,...,typename Valuen>
      std::size_t operator()(
        const boost::tuple<Value0,...,Valuen>& x)const;
    };
    

    Hash0, ..., Hashn - это типы объектов хеш-унарных функций, хранящиеся в composite_key_hash. Каждый из этих объектов должен быть CopyConstructible и CopyAssignable и возвращать значение типа std::size_t в диапазоне [0, std::numeric_limits::max()). По крайней мере, должен быть предусмотрен хеш-функтор. Определено максимальное количество хеш-функторов инстанциации composite_key_hash. composite_key_hash является CopyConstructible и CopyAssignable. Это также DefaultConstructible, если каждый Hashi в свою очередь является DefaultConstructible.

    Notation

    В дальнейшем мы используем ту же самую нотацию , введенную для composite_key_result.

    composite_key_hash members

    composite_key_hash(
      const Hash0& h0=Hash0(),
      const Hashn& hn=Hashn());
    Эффекты: Конструирует composite_key_hash, в котором хранятся копии поставляемых хеш-функторов.
    composite_key_hash(const key_hasher_tuple& x);
    Построение composite_key_hash, в котором хранятся копии хеш-функторов, поставляемых в x.
    const key_hasher_tuple& key_hash_functions()const;
    Returns;
    Returns: ссылка на хеш-функции, удерживающие хеш-функторы, внутренне хранящиеся в composite_key_hash.
    шаблон
    bool operator()(
      const composite_key_result& x)const;
    template
    bool operator()(
      const std::tuple& x)const;
    template
    bool operator()(
      const boost::tuple& x)const;
    Требуется: length(x)==length(key_hash_functions()). Выражение key_hash_functions(.get()(xi) справедливо для всех i в [0, длина(x)].
    Возврат: Значение в диапазоне [0, std::numeric_limits::max()), которое зависит исключительно от числового набора
    (key_hash_functions().get()(x0), ..., key_hash_functions().get()(xN), с N=length(x)-1.

    Шаблон класса composite_key_result_hash

    Устаревший. Используйте boost::hash.

    Specialization of boost::hash for composite_key results

    boost::hash, с CompositeKeyResult инстанциацией composite_key_result, ведет себя как специализация composite_key_hash где все поставляемые хеш-функторы представляют собой инстанциации boost::hash.

    namespace boost{
    template<typename CompositeKey>
    struct hash<multi_index::composite_key_result<CompositeKey> >
    {
      typedef multi_index::composite_key_result<CompositeKey> argument_type;
      typedef std::size_t                                     result_type;
      template<typename CompositeKey>
      std::size_t operator()(
        const multi_index::composite_key_result<CompositeKey>& x)const;
      
      template<typename... Values>
      std::size_t operator()(
        const std::tuple<Values...>& x)const;
      template<typename Value0,...,typename Valuen>
      std::size_t operator()(
        const boost::tuple<Value0,...,Valuen>& x)const;
    };
    } // namespace boost
    

    CompositeKeyResult должен представлять собой инстанциацию composite_key_result для некоторого типа composite_key. boost::hash::operator() эквивалентен composite_key_hash::operator():, принимая

    Hashi = boost::hash для всех i = 0,...,n.

    В дополнение к требованиям по Hashi, предъявляемым composite_key_hash, каждый из этих типов должен быть DefaultConstructible. boost::hash является DefaultConstructible, CopyConstructible и CopyAssignable.

    Semantics of composite_key_result

    Конструкция операций равенства, сравнения и хеширования для объектов composite_key_result основана на следующем обосновании: composite_key_result рассматривается как «виртуальный» кортеж, каждый из его элементов является результатом соответствующего элементарного извлечения ключа. Соответственно, любая данная операция решается комбинацией соответствующих элементных операций. Это отображение сохраняет фундаментальные свойства элементарных операций; например, оно определяет истинное отношение эквивалентности, если основные предикаты вызывают сами отношения эквивалентности. Мы можем официально изложить эти факты следующим образом.

    Рассмотрим инстанциацию composite_key_equal_to с типами Pred0, ..., Predn таким образом, что каждый Predi вызывает отношение эквивалентности на определенном типе Ti, и пусть CompositeKey будет типом формы composite_key< ; Ценность,KeyFrom Value0, ...,KeyFromValuej>, с j <= n, таким образом, что

    KeyFromValuei::result_type = Ti, для всех i = 0,...,j.
    Затем composite_key_equal_to вызывает отношение эквивалентности на элементах типа composite_key_result; такие два объекта эквивалентны, если все его элементарные значения экстрактора ключа также эквивалентны. Дополнительно, учитывая инстанциацию composite_key_hash, следующие типы представляют собой Composite_key_hash, composite_key_equal_to по отношению к composite_key_result:
    tuple,
    composite_key_result>Ki::result_type = Qi для всех i=0,...,j при условии, что каждый Qi или
    Compatible Key (Hashi, Predi).

    Для сравнения рассмотрим инстанциацию composite_key_compare с типами Compare0, ..., Comparen таким образом, что каждый Comparei вызывает строгий слабый порядок по типу Ti. Тогда для CompositeKey Тип, определенный таким же образом, как и выше, composite_key_compare вызывает строгий слабый порядок на элементах типа composite_key_result, а индуцированный порядок является лексикографическим. Кроме того, следующие типы: Совместимые ключи Совместимые ключи:

    Tuple, Kk>, с Ki>, с Ki>>0>i = 0,...,k.
    при условии, что
    ©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
    Top.Mail.Ru

    Время компиляции файла: 2024-08-30 11:47:00
    2025-05-19 17:55:13/0.040972948074341/1