Mam klasy tak:Czy mogę użyć zmiennej składowej jako klucza do hash_set/hash_map?
class Foo
{
long long Id;
string x;
string y;
// other member variables and functions
};
chciałabym zapisać to w hash_set
(lub hash_map
), ale użyć zmiennej ID Użytkownika jako klucz do wrzucania i poszukiwania. Nie jestem pewien, jak mogę to zrobić. Pomyślałem o następujących sposobach, ale żaden z nich nie jest naprawdę dobry:
1) Mogę napisać niestandardową funkcję skrótu, która będzie mieszała obiekt za pomocą Id, ale wtedy nie mogę użyć metody find()
na hash_set
wyszukaj element według Id (long long
), ponieważ będzie on wymagał przekazania obiektu Foo
.
2) Mogę zduplikować identyfikator i utworzyć hash_map<long long, Foo>
zamiast hash_set<long long, Foo>
, ale mam 100 milionów wystąpień tych obiektów, więc wolałbym nie powielać pola Id.
3) pole id mogę przenieść poza Foo
a następnie zrobić hash_map<long long, Foo>
, ale byłoby to swego rodzaju bałagan ponieważ id jest używane wewnętrznie przez klasę i byłoby lepiej, aby utrzymać go z Foo
.
Wszelkie pomysły? To, czego szukam, to sposób na przechowywanie obiektów Foo
, ale można je wyszukać w hash_set
przy użyciu long long
(według Id).
Dzięki!
Idź z trzecim podejściem. – Grozz
Drugi też jest w porządku. – sellibitze
Jaki jest wzór użycia? Czy konfigurujesz to raz, a potem czytasz tylko z niego, czy ciągle modyfikujesz zestaw? – sbi