Ho una classe come questa:Posso usare una variabile membro come chiave per un hash_set/hash_map?
class Foo
{
long long Id;
string x;
string y;
// other member variables and functions
};
mi piacerebbe conservare questo in un hash_set
(o hash_map
), ma utilizzare la variabile membro Id come la chiave per l'inserimento e la ricerca. Non sono sicuro di come posso farlo. Ho pensato ai seguenti modi, ma nessuno di questi è veramente buono:
1) Posso scrivere una funzione di hash personalizzata che cancellerà l'oggetto usando l'Id, ma non posso usare il metodo find()
su hash_set
su cercare l'oggetto con ID (long long
) poiché richiede l'inserimento di un oggetto Foo
.
2) posso duplicare il Id e creare un hash_map<long long, Foo>
invece di un hash_set<long long, Foo>
ma ho 100 milioni di istanze di questi oggetti così preferisco non duplicare il campo ID.
3) posso spostare il campo Id esterno del Foo
e poi fare hash_map<long long, Foo>
, ma sarebbe sorta di disordinato poiché l'ID viene utilizzato internamente dalla classe e sarebbe meglio tenerlo con Foo
.
Qualche idea? Quello che sto cercando è un modo per memorizzare gli oggetti ma essere in grado di cercarli nello hash_set
utilizzando un long long
(da Id).
Grazie!
Vai al terzo approccio. – Grozz
Anche il secondo va bene. – sellibitze
Qual è lo schema di utilizzo per questo? Stai configurando una cosa sola e poi leggi solo da essa o continui a modificare il set? – sbi