У меня есть такой класс:
class Foo
{
long long Id;
string x;
string y;
// other member variables and functions
};
Я хотел бы сохранить это в hash_set
(или hash_map
), но использовать переменную-член Id в качестве ключа для вставки и поиска. Я не уверен, как я могу это сделать. Я думал о следующих способах, но ни один из них не очень хорош:
1) Я могу написать собственную хеш-функцию, которая будет хешировать объект с использованием идентификатора, но затем я не могу использовать метод find()
в hash_set
для поиска элемента по идентификатору (long long
), поскольку потребует передачи объекта Foo
.
2) Я могу продублировать Id и создать hash_map<long long, Foo>
вместо hash_set<long long, Foo>
, но у меня есть 100 миллионов экземпляров этих объектов, поэтому я бы не стал дублировать поле Id.
3) Я могу переместить поле Id за пределы Foo
, а затем сделать hash_map<long long, Foo>
, но это было бы немного грязно, поскольку Id используется внутренним классом, и было бы лучше оставить его с Foo
.
Есть идеи? То, что я ищу, - это способ хранения Foo
объектов, но возможность поиска их в hash_set
с использованием long long
(по идентификатору).
Спасибо!