Saltar al contenido

¿El orden de iteración de std::set siempre es ascendente de acuerdo con la especificación de C++?

Después de investigar con expertos en esta materia, programadores de deferentes ramas y profesores hemos dado con la respuesta al dilema y la compartimos en esta publicación.

Solución:

Según el estándar C++, la iteración sobre los elementos en un std::set procede en orden ordenado según lo determinado por std::less o por el argumento de plantilla de predicado de comparación opcional.

(También según el estándar C ++, la inserción, la búsqueda y la eliminación toman como máximo O (lg norte) tiempo, por lo que los árboles de búsqueda equilibrados son actualmente la única opción de implementación viable para std::setaunque el estándar no exige el uso de árboles rojo-negro).

Significa que internamente std::set almacenará sus elementos como un árbol ordenado. Sin embargo, la especificación no dice nada sobre el orden de clasificación. Por defecto, std::set usos std::less y así se ordenará de menor a mayor. Sin embargo, puede hacer que la función de clasificación sea lo que quiera, usando este parámetro de plantilla:

std::set myCustomOrderedSet;

Así por ejemplo:

std::set > myInverseSortedSet;

o

struct cmpStruct 
  bool operator() (int const & lhs, int const & rhs) const
  
    return lhs > rhs;
  
;

std::set myInverseSortedSet;

De hecho, estos ejemplos también se proporcionan en el sitio web que vinculó. Más específicamente aquí: constructor de conjuntos.

por especificación, el orden de iteración del conjunto siempre es ascendente

Sí, los valores de set siempre son ascendentes si los imprime en secuencia. Como dice la descripción, generalmente se implementa usando Red-Black Tree (RBT), pero los escritores del compilador tienen la opción de violar esto, pero generalmente se apegarían al tema de RBT ya que cualquier otra implementación no será eficiente en recursos para lograr la tarea de set.

Puntuaciones y reseñas

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)


Tags : / / /

Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *