Clasificación de vectores C ++

Clasificación de vectores C ++
El vector C ++ es como una matriz con funciones de miembros (métodos). La longitud del vector se puede aumentar o disminuir en la ejecución del programa. El vector tiene muchas funciones miembros. Entre todas estas funciones miembros, no organiza el vector. Sin embargo, C ++ tiene una biblioteca llamada Biblioteca de algoritmo. Esta biblioteca tiene muchas funciones algorítmicas de uso general. Una de ellas es la función Sort (). Esta función se puede usar para clasificar los contenedores C ++, como el vector. Todos los valores de un vector son valores del mismo tipo.

Un programador puede escribir su propia función (). Sin embargo, la función sort () de la biblioteca de algoritmo es probable que funcione mejor de lo que escribe el programador ordinario.

La función sort () puede ordenar los valores de un vector en orden ascendente o en orden descendente. Para ordenar un vector, la biblioteca de algoritmo debe incluirse. La biblioteca de vector también debe incluirse. El comienzo del programa debería ser algo así como:

#incluir
#incluir
#incluir
usando el espacio de nombres STD;

El vector es en realidad una clase, desde la cual se pueden crear objetos vectoriales. Con la sección superior anterior del programa, se puede clasificar un vector a clasificar de la siguiente manera:

vector vtr = 'z', 'x', 'c', 'v', 'b', 'n', 'm', 'a', 's', 'd';

El nombre de la clase es un vector. El nombre del objeto instanciado es VTR.

En este tutorial, la codificación de clasificación se realiza en la función C ++ Main (). Este tutorial explica cómo ordenar un vector C ++ usando el vector anterior, VTR.

Contenido del artículo

  • Clasificación por defecto
  • Clasificación en orden descendente
  • Función de comparación personalizada
  • Otros tipos de datos
  • Conclusión

Clasificación por defecto

Clases de clasificación predeterminadas en orden ascendente. La sintaxis para esto es:

plantilla
sort void (randomAccessIterator primero, randomAccessIterator Último);

Clasificando todo el vector

El siguiente código clasifica todo el vector:

ordenar (VTR.begin (), VTR.fin());
para (int i = 0; icout<cout<La lista no organizada es:

Z, X, C, V, B, N, M, A, S, D

La lista ordenada es:

A, B, C, D, M, N, S, V, X, Z,

cual es correcta. Si la clasificación no es correcta, entonces la falla es la del programador y no la de la función Sort ().

El randomaccessitererator es intrínseco. VTR.begin () Devuelve un iterador que apunta al primer elemento y VTR.End () Devuelve otro iterador del mismo tipo que apunta justo después del último elemento. Por lo tanto, no hay necesidad de instanciar un vector que indique, RandomAccessitererator. De esta manera, toda la lista está ordenada.

Clasificar un rango en orden ascendente

La lista no organizada anterior tiene diez elementos con índices:

0, 1, 2, 3, 4, 5, 6, 7, 8, 9

Para ordenar solo los elementos de la posición 4, que es índice, 3 = 4 - 1, a la posición 9, que es índice, 8 = 9 - 1, agregue 3 a VTR.begin () para tener el primer iterador y luego agregue 8 a VTR.begin () para tener el último iterador, para la función sort (). El 9th El elemento del índice 8 no se incluirá en la clasificación. Es decir, el último elemento indicado en el rango elegido, está excluido para la clasificación. El siguiente código ilustra esto:

ordenar (VTR.begin () + 3, VTR.begin () + 8);
para (int i = 0; icout<cout<La lista no organizada es:

Z, X, C, V, B, N, M, A, S, D
[/c] c
La lista ordenada es:
[cc lang = "text" width = "100%" height = "100%" escapado = "true" thema = "Blackboard" Nowrap = "0"]
Z, X, C, A, B, M, N, V, S, D,

Los elementos en las posiciones 4, 5, 6, 7, 8 se han ordenado. El elemento en el 9th La posición no se ha incluido en el tipo. Estas posiciones corresponden a los índices 3, 4, 5, 6, 7. El elemento en el índice 8 no se ha incluido en el tipo.

Entonces, para ordenar un rango, identificar los primeros elementos y los últimos en el rango, no necesariamente de toda la lista. Agregue el índice del primer elemento al iterador begin (). Agregue el índice del último elemento, todavía al iterador Begin (). Recuerde que el último elemento para el rango no se incluirá en el tipo, pero se incluirá el primer elemento para el rango.

Es posible agregar un índice a un iterador porque agregar un número es lo mismo que incrementar el iterador ese mismo número de veces. Incrementar a un iterador una vez lo hace un punto al siguiente elemento.

Clasificación en orden descendente

La sintaxis es:

plantilla
sort void (randomAccessIterator primero, randomAccessIterator último, comparar comp);

Esto difiere de la sintaxis anterior con la presencia de "Comparar comp". comp es un puntero de función o un objeto de función. comp en realidad decide si la clasificación debe ser ascendente o descendente. Su ausencia es el caso predeterminado, lo que significa descender.

Ordenar la lista completa en orden descendente

El siguiente código clasifica todo el vector anterior en orden descendente:

ordenar (VTR.begin (), VTR.end (), mayor());
para (int i = 0; icout<cout<La lista no organizada es:

Z, X, C, V, B, N, M, A, S, D

El vector ordenado en orden descendente es:

Z, X, V, S, N, M, D, C, B, A,

Tenga en cuenta el uso de "mayor ()" en el lugar de comp.

Lo opuesto a mayor () es menor (), que es el valor predeterminado (ascendente), y no tiene que ser escrita.

Clasificar un rango en orden descendente

Se puede clasificar un rango en orden descendente, así como en orden ascendente. El siguiente código clasifica el 4th a los 9th elemento sin incluir el 9th elemento; y descendiendo.

ordenar (VTR.begin () + 3, VTR.begin () + 8, mayor());
para (int i = 0; icout<cout<La lista no organizada es:

Z, X, C, V, B, N, M, A, S, D

El vector con su rango elegido, ordenado en orden descendente, es:

Z, X, C, V, N, M, B, A, S, D,

Función de comparación personalizada

El siguiente programa tiene una función de comparación personalizada para ascender:

#incluir
#incluir
#incluir
usando el espacio de nombres STD;
vectorvtr = 'z', 'x', 'c', 'v', 'b', 'n', 'm', 'a', 's', 'd';
bool compare (char a, char b)
regresar (a < b);

int main ()

ordenar (VTR.begin (), VTR.end (), comparar);
para (int i = 0; icout<cout<regresar 0;

La función para hacer la comparación se llama comparar. Devuelve un bool. Tiene dos parámetros, A y B, del mismo tipo, que el tipo de elemento vectorial. Devuelve verdadero si a es menor que b y falso de lo contrario. El nombre de esta función es el tercer argumento de la llamada de función sort (). En este programa, Compare es lo mismo que menos (). Se pueden usar algunos otros nombres en lugar de comparar.

La lista no organizada es:

Z, X, C, V, B, N, M, A, S, D

La lista ordenada es:

A, B, C, D, M, N, S, V, X, Z,

Por supuesto, la función de comparación personalizada se puede usar para un rango. El siguiente programa ilustra esto:

#incluir
#incluir
#incluir
usando el espacio de nombres STD;
vectorvtr = 'z', 'x', 'c', 'v', 'b', 'n', 'm', 'a', 's', 'd';
bool compare (char a, char b)
regresar (a < b);

int main ()

ordenar (VTR.begin () + 3, VTR.begin () + 8, compare);
para (int i = 0; icout<cout<regresar 0;

La lista no organizada es:

Z, X, C, V, B, N, M, A, S, D

La lista ordenada es:

Z, X, C, A, B, M, N, V, S, D,

La función de comparación se puede codificar para descender. El siguiente programa ilustra esto:

#incluir
#incluir
#incluir
usando el espacio de nombres STD;
vectorvtr = 'z', 'x', 'c', 'v', 'b', 'n', 'm', 'a', 's', 'd';
bool compare (char a, char b)
return (a> b);

int main ()

ordenar (VTR.begin (), VTR.end (), comparar);
para (int i = 0; icout<cout<regresar 0;

Solo cambia (a b).

La lista no organizada es:

Z, X, C, V, B, N, M, A, S, D

La lista ordenada es:

Z, X, V, S, N, M, D, C, B, A,

La función de comparación personalizada se puede usar para un rango, en orden descendente. El siguiente programa ilustra esto:

#incluir
#incluir
#incluir
usando el espacio de nombres STD;
vectorvtr = 'z', 'x', 'c', 'v', 'b', 'n', 'm', 'a', 's', 'd';
bool compare (char a, char b)
return (a> b);

int main ()

ordenar (VTR.begin ()+3, VTR.begin ()+8, compare);
para (int i = 0; icout<cout<regresar 0;

La lista no organizada es:

Z, X, C, V, B, N, M, A, S, D

El vector con su rango elegido, ordenado en orden descendente, es:

Z, X, C, V, N, M, B, A, S, D,

Otros tipos de datos

Otros tipos de datos se pueden ordenar utilizando sus tipos. Por ejemplo, si se va a ordenar el tipo de datos INT, entonces se utilizaría "INT" para crear el vector y en la función de comparación de construcción o personalizada. Si el tipo de datos está en una biblioteca, entonces el encabezado de la biblioteca debe incluirse en el programa, en cuanto al caso de la cadena a continuación:

#incluir
#incluir
#incluir
#incluir
usando el espacio de nombres STD;
vectorvtr = "ze", "xe", "ce", "ve", "be", "ne", "me", "ae", "se", "de";
int main ()

ordenar (VTR.begin (), VTR.end (), mayor ());
para (int i = 0; icout<cout<regresar 0;

La lista no organizada es:

Ze, xe, ce, ve, be, ne, me, ae, se, de

La lista ordenada es:

Ze, xe, ve, se, ne, me, de, ce, be, ae,

Conclusión

C ++ viene con la biblioteca de algoritmo que tiene una función sort (). Esta función toma dos o tres argumentos en su uso normal. El primer argumento es en donde la lista de vectores, el tipo debería comenzar. El segundo argumento es en donde la lista de vectores, el tipo debería terminar. El tercer argumento determina si la clasificación se debe realizar en orden ascendente o en orden descendente.