Clasificación de elementos en un conjunto C ++

Clasificación de elementos en un conjunto C ++
Un ejemplo de un conjunto es: st = 'e', 'a', 'd', 'b', 'c'

Los caracteres de entrada aquí no están organizados. Este conjunto se puede crear con la siguiente declaración:

colocar st = 'e', 'a', 'd', 'b', 'c';

Este es un conjunto de caracteres. Es posible tener un conjunto de otro tipo. Cualquiera que sea el caso para hacer la codificación, la biblioteca de conjuntos C ++ debe incluirse en el programa. Considere el siguiente programa:

#incluir
#incluir
usando el espacio de nombres STD;
int main ()

setst = 'e', 'a', 'd', 'b', 'c';
para (set :: iterator iter = st.comenzar(); iter != ST.fin(); iter ++)
cout<< *iter<< ", ";
cout<regresar 0;

La salida es:

A B C D E,

La salida se ordena ascendiendo cuando la entrada no se ordenó. Después de que se han insertado elementos en un conjunto, se clasifican. Con la configuración predeterminada, como en el programa anterior, el tipo es ascendente.

El programa anterior comenzó con la inclusión de la biblioteca iostream. Esto es necesario para su uso con la terminal (consola). La siguiente línea es otra directiva que incluye la biblioteca de set. La línea posterior no es una directiva. Es una declaración que termina con un punto y coma que insiste en que cualquier nombre no precedido por "std ::" es del espacio de nombres estándar.

Las líneas de encabezado son seguidas por la función C ++ Main (). La primera declaración en la función principal declara el conjunto. El segundo segmento de código muestra los valores del conjunto, que deberían haberse sometido a una clasificación interna, por c++.

Habiendo establecido ascendente ordenado

En el espacio de nombres estándar, la sintaxis para construir un conjunto es en realidad:

plantilla, asignator de clases = asignator> Conjunto de clases;

Hay tres especializaciones de plantillas aquí. Si el programador no le da el último, el valor predeterminado es elegido por C++. Si el programador no proporciona el último y el segundo, se eligen sus valores predeterminados. El valor predeterminado para la segunda especialización es "menor", lo que significa que ascender. Si se omite, el conjunto todavía está ordenado ascendiendo. Si está presente como "menos", el conjunto se clasifica ascendiendo, como muestra el siguiente programa:

#incluir
#incluir
usando el espacio de nombres STD;
int main ()

colocarst = 'e', 'a', 'd', 'b', 'c';
para (set :: iterator iter = st.comenzar(); iter != ST.fin(); iter ++)
cout<< *iter<< ", ";
cout<regresar 0;

Observe que "char" está en lugar de "clave" en "menos". La salida es:

A B C D E,

ascendente ordenado. El programa comienza con la inclusión de la biblioteca iostream. Esto es necesario para su uso con la terminal (consola). La siguiente línea es otra directiva que incluye la biblioteca de set. La línea posterior no es una directiva. Es una declaración que termina con un punto y coma que insiste en que cualquier nombre no precedido por "std ::" es del espacio de nombres estándar.

Las líneas de encabezado son seguidas por la función C ++ Main (). La primera declaración en la función principal declara el conjunto utilizando "menos" como la segunda especialización de plantilla. El segundo segmento de código muestra los valores del conjunto, que deberían haberse sometido a una clasificación interna adecuadamente, por c++.

Habiendo establecido descendiendo

Para tener un conjunto de descendencia, la segunda especialización debe incluirse. Es "mayor", donde la "clave" se reemplaza por el tipo de datos. Cada vez más son funciones predefinidas en la biblioteca de set. El siguiente programa da como resultado un conjunto que está ordenado descendiendo:

#incluir
#incluir
usando el espacio de nombres STD;
int main ()

colocarst = 'e', 'a', 'd', 'b', 'c';
para (set :: iterator iter = st.comenzar(); iter != ST.fin(); iter ++)
cout<< *iter<< ", ";
cout<regresar 0;

La salida es:

E, D, C, B, A,

ordenado descendiendo. El programa comienza con la inclusión de la biblioteca iostream. Esto es necesario para su uso con la terminal (consola). La siguiente línea es otra directiva que incluye la biblioteca de set. La línea posterior no es una directiva. Es una declaración que termina con un punto y coma, insistiendo en que cualquier nombre no precedido por "std ::" es del espacio de nombres estándar.

Las líneas de encabezado son seguidas por la función C ++ Main (). La primera declaración en la función principal declara el conjunto utilizando "mayor" como la segunda especialización de plantilla. El segundo segmento de código muestra los valores del conjunto, que deberían haberse sometido a una clasificación interna adecuadamente, por c++.

Observadores

Las sintaxis para los observadores del conjunto son:

key_compare key_comp () const;

y

value_compare value_comp () const;
key_compare key_comp () const
Considere el siguiente segmento de código:
colocar> st = 'e', 'a', 'd', 'b', 'c';
bool bl = st.key_comp () ('c', 'd');
cout << bl << endl;

La salida es: 1, para verdadero.

key_comp () es una función miembro de la clase establecida. No toma ningún argumento. Devuelve un objeto de función que es una función que toma dos argumentos. El objeto de función (llamada) se identifica en la segunda declaración anterior como "st.key_comp () () ". Se espera que sus argumentos sean elementos del conjunto después de la clasificación interna basada en la especialización de la plantilla de comparación.

Si su primer argumento viene primero en el conjunto después de la clasificación interna, entonces el objeto de función devolverá verdadero, de lo contrario, devolverá falso. Todo lo que se codifica en la segunda declaración anterior.

Si la especialización de la plantilla de comparación hubiera sido "mayor", entonces la salida habría sido 0, para falso.

value_compare value_comp () const;

Esto se refiere a los valores del conjunto de pares de clave/valor: ver más tarde.

Conclusión

Después de que se hayan insertado elementos en un conjunto en C ++, se clasifican inmediatamente internamente. Si la especialización de plantilla de comparación es "menor", que es el valor predeterminado, y se puede omitir, entonces la clasificación se realizará ascendiendo. Si es "mayor", entonces la clasificación se hará descender. La "clave" en estas expresiones se reemplaza por el tipo de valores en el conjunto. Los valores son de un tipo.

Por lo tanto, un conjunto no necesita una función de miembro de clasificación porque los valores siempre están ordenados. Cuando se crea un conjunto con algunos elementos iniciales, estos elementos están ordenados. Cualquier inserto de cualquier elemento después de eso hace que la reorganización. Los valores de un conjunto como el descrito anteriormente se llaman claves. Sin embargo, algunos conjuntos pueden tener pares de clave/valor; ver más tarde.