[STL_ queue] cola | cola de prioridad | explicación detallada, incluidas funciones comunes, uso básico

Uno, la cola

La estructura de datos de la cola se ha mencionado en nuestra cola escrita a mano. La cola es una estructura de datos simple. En primer lugar, podemos saber que la cola es un tipo de operación con dos operaciones, y almacenamos relaciones relacionadas . Luego, para completar esta operación básica de entrada y salida, podemos transformar esta estructura de datos en una estructura de datos de doble puntero.Establecemos un puntero en el nodo principal y el nodo final respectivamente para completar esta estructura de datos.


Para una mirada más profunda, puede ver la sección de cola manuscrita
inserte la descripción de la imagen aquí

Segundo, la realización del stl de la cola.

1, la creación de la cola

queue <type> name ;

2, ventana emergente común, push-in, cabeza y cola de la cola

empujar

#include <iostream>
#include <queue>
using namespace std ;
int main ()
{
    
    
	queue <int> q ;
	q.push (100 ) ;
	cout << q.front() << endl ;
	return 0 ;
}

surgir

q.pop() ;

Volver a la cabeza de la cola

q.front() 
//队头
q.back() ;
//队尾

3, operaciones comunes

tamaño de la cola

q.size() ;

Tres, cola de prioridad

1. Cola de prioridad

La cola de prioridad es ante todo una estructura de datos implementada al cambiar la estructura de datos del montón. En esencia, la cola de prioridad es una estructura de datos con un concepto de valor. Primero, podemos escribir el peso por nosotros mismos para completar la cola. Clasificar. La escritura del valor de peso completo requiere la implementación de una biblioteca funcional especial priority_queue < type> , la cola de prioridad se genera de acuerdo con la relación de valor de peso completo y el almacenamiento dinámico máximo se genera de forma predeterminada.

El rendimiento de esta prioridad es dar salida primero a la prioridad más alta, salida de mayor a menor

inserte la descripción de la imagen aquí

2, la creación de la cola de prioridad

priority_queue <type ,  容器  , 权值> name 
  • Cree una cola de prioridad predeterminada (los valores más grandes salen primero)
priority_queue <type > name  ;
  • Cree rápidamente una cola de prioridad anti-predeterminada (la que tiene el valor más pequeño sale primero)
priority_queue <int , vector<int> ,greater<int> > 
  • Crear secuencias personalizadas

En nuestra secuencia de definición, la relación verdadero-falso devuelta debe ser lo contrario de lo que expresamos, como A<B, cuando juzgamos verdadero y falso, debemos darle falso. De hecho, esto se debe a que la prioridad en la
matriz es relativamente grande Los siguientes elementos también son
cómo se crea b:


Construcción de estructura de estructura de manera funcional.

funcional

#include <iostream>
#include <queue>
#include <functional>
using namespace std ;

bool cmp(int a ,int b )
{
    
    
   return a > b ;  
}

int main ()
{
    
    
    priority_queue <int , vector<int> ,function<bool(int ,int)>> qu(cmp) ;
    qu.push (34);
    qu.push (345);
    qu.push(354);
    while ( qu.size() )
    {
    
    
        cout << qu.top() << endl ;
        qu.pop() ;
    } 
   return 0 ;
}

el complejo de construcción de estructuras
ya no se muestra

3. El funcionamiento básico de la cola de prioridad

agregar función, eliminar función

//压入队头
q.push() ;
//弹出队尾
q.pop() ;

cola emergente

q.top() ;

4, función básica

Devuelve el tamaño de la cola de prioridad

cout << q.size() << endl ;

**Proceso de implementación simple**

#include <iostream>
#include <queue>
#include <functional>
#include <vector>
using namespace std ;

bool cmp(pair<int, int > a, pair<int, int > b)
{
    
    
	if( a.first != b.first)
	return a.first < b.first ;
	return a.second > b.second ;
	
}


int main () 
{
    
    
	int n ;
	int j = 1 ;
	cin >> n ;
	//输出最大的元素 ,当有多个的时候输出下标最小的 
	priority_queue <pair<int,int> ,vector<pair<int,int> > ,function<bool(pair<int,int> ,pair<int,int>)> >q(cmp);
	for(j = 1 ; j <= n ; j ++ )
	{
    
    
		int x ;
		cin >> x ;
		q.push({
    
    x , j});		
	}
	for(int i = 1 ; i <= n ; i ++ )
	{
    
    
		auto t = q.top() ;
		cout << t.second << endl ;
		q.pop() ;
	}
	
	return 0 ;
}

Supongo que te gusta

Origin blog.csdn.net/wen030803/article/details/131977285
Recomendado
Clasificación