Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros entornos y lenguajes > C++ Builder
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 20-02-2007
Avatar de oracle
oracle oracle is offline
Miembro
 
Registrado: feb 2005
Posts: 99
Poder: 20
oracle Va por buen camino
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>
_Tp claramente es el dato que se desea almacenar, pero los otros dos ni modo que entienda para que son....

Saludos y mil gracias de antemano.....

Oracle
__________________
El único hombre que no se equivoca es el que nunca hace nada.
Responder Con Cita
  #2  
Antiguo 20-02-2007
wako13 wako13 is offline
Registrado
 
Registrado: sep 2006
Posts: 5
Poder: 0
wako13 Va por buen camino
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
Espero te sirva...

Saludos Cordiales
Responder Con Cita
  #3  
Antiguo 20-02-2007
Avatar de oracle
oracle oracle is offline
Miembro
 
Registrado: feb 2005
Posts: 99
Poder: 20
oracle Va por buen camino
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,???,???>
Saludos y espero me haya explicado mejor.........
__________________
El único hombre que no se equivoca es el que nunca hace nada.
Responder Con Cita
  #4  
Antiguo 22-02-2007
Avatar de oracle
oracle oracle is offline
Miembro
 
Registrado: feb 2005
Posts: 99
Poder: 20
oracle Va por buen camino
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
*/
Saludos

Oracle
__________________
El único hombre que no se equivoca es el que nunca hace nada.
Responder Con Cita
  #5  
Antiguo 22-02-2007
Avatar de oracle
oracle oracle is offline
Miembro
 
Registrado: feb 2005
Posts: 99
Poder: 20
oracle Va por buen camino
Ya lo solucione, la cosa esta en la sobrecarga del operador <

Código:
 
bool operator< (const Destination & right) const {
  return distance < right.distance; 
}
Saludos
__________________
El único hombre que no se equivoca es el que nunca hace nada.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

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


La franja horaria es GMT +2. Ahora son las 22:30:57.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi