Tengo un std :: set con la clase Compare que requiere un parámetro adicional para comparar claves. Este parámetro variable se determina en tiempo de ejecución y lo empaqueta dentro de las teclas del conjunto solo para que sea accesible para Compare.pasando más datos a std: set Clase de comparación
Sin embargo, el parámetro lógicamente pertenece al conjunto en lugar de a las claves, por lo que esta solución parece incómoda y duplica el mismo valor en todas las claves.
¿Existe alguna forma elegante de pasar un parámetro adicional a la clase Compare? (Primero pensé en set :: value_comp, pero devuelve comparar objeto por valor mientras necesito una referencia).
Gracias.
Esta respuesta es correcta, pero me pareció difícil de seguir. Para aclarar: necesita crear un objeto de comparación con los parámetros adicionales dentro, luego pasar ese objeto al constructor std :: set. No intente modificar los parámetros una vez que se haya construido el conjunto. –
@Mark Ransom - no hay ninguna bala de plata, si se cambia la regla de clasificación, entonces todo el conjunto debe reconstruirse. Si los parámetros no afectan el orden de clasificación, puede pasarlo a Traits por referencia o puntero. – Dewfy
No hay forma de reconstruir un conjunto, aparte de copiarlo en uno nuevo, así que estoy de acuerdo con mi afirmación. El objeto de comparación siempre debe devolver el mismo valor cuando se le da el mismo conjunto de entradas, de lo contrario, el conjunto puede funcionar mal. –