FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
||||
|
||||
Trabajo con cola con prioridad
Saludos estimada comunidad:
Mi problema es el siguiente: Estoy haciendo un pequeño programa en C++ (Builder 6) y necesito utilizar colas con prioridad, pero quisiera hacerlo sin tener que implementar una. He buscado en la ayuda del Builder y hay una clase para resolver estos problemas, pero la cosa está en que no sé qué parámetros ni como pasárselos para que tome la prioridad....la clase es esta: Código:
priority_queue<_Tp,_Sequence,_Compare> Saludos y mil gracias de antemano..... Oracle
__________________
El único hombre que no se equivoca es el que nunca hace nada. |
#2
|
|||
|
|||
En la ayuda del Builder 6 encontré lo siguiente:
Código:
Example // // p_queue.cpp // #include <queue> #include <deque> #include <vector> #include <string> #include <iostream> using namespace std; int main(void) { // Make a priority queue of int using a vector container priority_queue<int, vector<int>, less<int> > pq; // Push a couple of values pq.push(1); pq.push(2); // Pop a couple of values and examine the ends cout << pq.top() << endl; pq.pop(); cout << pq.top() << endl; pq.pop(); // Make a priority queue of strings using // a deque container priority_queue<string, deque<string>, less<string> > pqs; // Push on a few strings then pop them back off int i; for (i = 0; i < 10; i++) { pqs.push(string(i+1,'a')); cout << pqs.top() << endl; } for (i = 0; i < 10; i++) { cout << pqs.top() << endl; pqs.pop(); } // Make a priority queue of strings using a deque // container, and greater as the compare operation priority_queue<string,deque<string>, greater<string> > pgqs; // Push on a few strings then pop them back off for (i = 0; i < 10; i++) { pgqs.push(string(i+1,'a')); cout << pgqs.top() << endl; } for (i = 0; i < 10; i++) { cout << pgqs.top() << endl; pgqs.pop(); } return 0; } Program Output 2 1 a aa aaa aaaa aaaaa aaaaaa aaaaaaa aaaaaaaa aaaaaaaaa aaaaaaaaaa aaaaaaaaa aaaaaaaa aaaaaaa aaaaaa aaaaa aaaa aaa aa a a a a a a a a a a a a aa aaa aaaa aaaaa aaaaaa aaaaaaa aaaaaaaa aaaaaaaaa aaaaaaaaaa Saludos Cordiales |
#3
|
||||
|
||||
Bueno, yo efectivamente consulte la ayuda del Builder antes de poner el post, y vi ese ejemplo precisamente, pero la idea que no lo entiendo del todo:
Por ejemplo dejame plantear una pequeña situacion a ver si me ayudas con lo que quiero: tenemos la definicion de una clase X en algun lugar, y esta tiene por ejmplo un metodo Y() que calcula cierto numero a partir de los atributos de la clase X y lo devuelve como un entero. Ahora yo quiero almacenar objetos de tipo X en una cola con prioridad ordenada ascendentemento por lo valores que devuelve el metodo Y(), entonces es ahi donde no se como delcrar la Cola, o sea me quedaria algo mas o menos asi, pero que pongo en el segundo y tercer argumento de la declaracion????? Código:
priority_queue<X,???,???>
__________________
El único hombre que no se equivoca es el que nunca hace nada. |
#4
|
||||
|
||||
He encontrado este ejemplo y creo que está bastante descriptivo, pero todavía hay algo que no entiendo, y es ¿cómo sabe la cola que tiene que ordenar por el parámetro "distance", si en ningún lugar veo la especificación de eso?
El ejemplo es el siguiente: Código:
#include <string> class Destination { unsigned int distance; string destination; friend ostream& operator<<(ostream &, const Destination &) ; public: Destination (const string dt, unsigned int ds) : distance(ds), destination(dt) {} bool operator< (const Destination & right) const { return distance < right.distance; } }; ostream & operator << (ostream& os, const Destination & p) { return os << p.destination << " " << p.distance ; } int main() { // keep a priority queue of distances to cities priority_queue < Destination > que; que.push(Destination("halifax", 0)); que.push(Destination("truro", 100)); que.push(Destination("moncton", 230)); while (! que.empty() ) { // remove top entry from queue cout << que.top() << endl; que.pop(); } } /* output moncton 230 truro 100 halifax 0 */ Oracle
__________________
El único hombre que no se equivoca es el que nunca hace nada. |
#5
|
||||
|
||||
Ya lo solucione, la cosa esta en la sobrecarga del operador <
Código:
bool operator< (const Destination & right) const { return distance < right.distance; }
__________________
El único hombre que no se equivoca es el que nunca hace nada. |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Forzar impresión de la cola del administrador | Casimiro Notevi | Impresión | 3 | 05-03-2010 20:13:19 |
Cancelar cola impresion en red | jmbarrio | Impresión | 0 | 21-12-2006 17:04:22 |
control de la cola de impresión | jun2008 | Impresión | 0 | 10-04-2006 23:39:31 |
Como dar Prioridad de Procesamiento a una Aplicación???? | AGAG4 | Varios | 3 | 19-05-2005 18:15:31 |
La cola de la novia.... | marcoszorrilla | Humor | 6 | 23-05-2004 18:30:13 |
|