que tienen una clase como esta:¿Puedo usar una variable miembro como clave para hash_set/hash_map?
class Foo
{
long long Id;
string x;
string y;
// other member variables and functions
};
me gustaría guardar esto en un hash_set
(o hash_map
), pero el uso de la variable miembro Id como la clave para la inserción y búsqueda. No estoy seguro de cómo puedo hacer esto. Pensé en las siguientes formas, pero ninguna de ellas es realmente buena:
1) Puedo escribir una función hash personalizada que pellizque el objeto usando Id, pero luego no puedo usar el método find()
en hash_set
para busca el elemento por Id (long long
) ya que requerirá que se pase un objeto Foo
.
2) Puedo duplicar el Id. Y crear un hash_map<long long, Foo>
en lugar de un hash_set<long long, Foo>
pero tengo 100 millones de instancias de estos objetos, así que prefiero no duplicar el campo Id.
3) que se puede mover el campo ID fuera del Foo
y luego hago hash_map<long long, Foo>
, pero sería especie de desordenado ya que la ID se utiliza internamente por la clase y sería mejor mantenerlo con Foo
.
¿Alguna idea? Lo que estoy buscando es una forma de almacenar objetos Foo
, pero ser capaz de buscarlos en el hash_set
usando un long long
(por Id).
Gracias!
Ir con el tercer enfoque. – Grozz
El segundo está bien también. – sellibitze
¿Cuál es el patrón de uso para esto? ¿Lo está configurando una vez y luego solo leyó o sigue modificando el conjunto? – sbi