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.cppAlgué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.