Boost Multi-Index: chiave composita di vettore e int per gli indici hash
-
19-09-2019 - |
Domanda
come ho appena imparato a nella mia altra domanda , potrei usare un composite_key
per una struttura, che ha una std::vector
e un intero. Ora la mia domanda è:? Posso usare questo in qualche modo di lavorare con hashed_indecies
Ecco un esempio simile a QUESTO :
struct unique_property
{
//the pair of int and std::vector<int> shall be unique
int my_int;
std::vector<int> my_vec;
};
typedef multi_index_container<
unique_property,
indexed_by<
hashed_unique< // indexed by my_int and every entry of my_vec
composite_key<
street_entry,
member<unique_property,int,&unique_property::my_int>,
member<unique_property,std::vector<int>,&unique_property::my_vec>
>
>,
random_access< >
>
> property_locator;
Il problema è (ovviamente) che un std::vector<int>
non è hash-chiave adatta. Posso inserire questo codice in un elegante involucro (o qualcosa di simile), per produrre un hash-chiave da ogni ingresso di my_vec
così?
Soluzione
Usa frammento di codice dal vostro suggerimento qui . Dovrebbe funzionare. Ho aggiunto i miei commenti lì.
Altri suggerimenti
Se si desidera vettore sia hashable, si può semplicemente scrivere una funzione hash<vector<int> >
in namespace std
, il che rende hash però per favore (suggerimento: si potrebbe essere in grado di cavarsela con hashing solo i primi elementi in alcune applicazioni). Questo dovrebbe rendere il lavoro std::hash_set<vector<int> >
, e penso che il vostro contenitore più complesso pure.