Usando std::less para un conjunto de punteros.
Tengo una clase donde estoy declarando un conjunto de la siguiente manera:
std::set<upfir::retentionsignal*> _retSignalSet;
Estoy intentando usar la función de comparación std::less en él. Intenté algo como esto:
std::set<upfir::retentionsignal*,></upfir::retentionsignal*,><upfir::retentionsignal*>> _retSignalSet;
El feedback que estoy recibiendo es “agregar std::less no lo hará determinista. Debes comparar el nombre”. ¿Alguien puede explicarme cómo se puede lograr esto ya que no he trabajado con std::less antes?
Gracias</upfir::retentionsignal></upfir::retentionsignal>
davy.ai
El feedback que recibiste es correcto. Agregar std::less como un comparador no necesariamente hará que el conjunto sea determinístico. La función de comparación utilizada por std::set debe definir un orden estrictamente débil, lo que significa que debe definir un orden total y no permitir ambigüedad ni inconsistencias.
La forma más fácil de lograr esto cuando se trabaja con punteros es definir una función de comparación personalizada que compare los objetos apuntados por los punteros. Aquí tienes un ejemplo:
Aquí, definimos un objeto de función de comparación
ComparePtr
que toma dos punteros a objetosUPFIR::RetentionSignal
y compara los objetos mismos utilizando el operador menor que definido para la claseUPFIR::RetentionSignal
. Luego, usamos este objeto de función de comparación como el comparador para nuestro conjunto.Esto garantiza un orden total en los objetos del conjunto y debería hacerlo determinístico.</upfir::retentionsignal*,>