equal_range in boost :: Multi_Indexed_Container Chave composta com operador de comparação

Estou tentando consultar resultados de um contêiner de índice MultiIndex onde o tipo de valor é uma estrutura de três elementos. O primeiro e o valor são fornecidos, mas o segundo e o terceiro precisam ser maiores ou menores que um parâmetro de consulta.

Depois de pesquisar, descobri que um extrator de chaves personalizado precisa ser implementado e alguns dos links aqui sugerem o mesmo, mas não consigo implementá-lo:

boost :: multi_index extrator de chave definido pelo usuário e chave compostahttps://www.boost.org/doc/libs/1_62_0/libs/multi_index/test/test_composite_key.cpp

Alguém pode me ajudar a fazê-lo funcionar?

Abaixo está minha implementação struct e multi-index:

#define RANKFILTERVIEW 0

struct TPQ {
    int UID;
    int Value;
    int Rank;
    TPQ():UID(0),Value(0),Rank(0)
    { }
    TPQ(int _T, int _V, int _R):UID(_T),Value(_V),Rank(_R)
    { }
};

typedef bip::allocator<
    TPQ,bip::managed_shared_memory::segment_manager
> shared_struct_allocator;

typedef bmi::multi_index_container<
    TPQ,
    bmi::indexed_by<
        bmi::ordered_unique<bmi::tag<struct Composite>,
            bmi::composite_key<TPQ,
                bmi::member<TPQ, int,&TPQ::UID>,
                bmi::member<TPQ, int,&TPQ::Value>,
                bmi::member<TPQ, int,&TPQ::Rank>
        > >
    >,
    shared_struct_allocator
> Rank_Set;

typedef nth_index<Rank_Set, RANKFILTERVIEW>::type Rank_view;

int main()
{
    bip::managed_shared_memory segment(bip::open_only,"RANKSOTRE");

    int UID =52478;

    std::pair<Rank_Set*, std::size_t> RankOrderRecord=segment.find<Rank_Set>("RANKDATARECORD");

    /// Here I want the result as stated below.
    auto range = RankOrderRecord.first->get<Composite>().equal_range(boost::make_tuple(UID,_2>500,_3>5));

}

Eu tenho um conjunto de instruções que classificar ou reorganizar devem ser ignoradas.

questionAnswers(1)

yourAnswerToTheQuestion