Priority_queue/Vector [C++] - C++ - Programmation
Marsh Posté le 20-06-2005 à 14:48:45
ben utilise vector, vu que c'est que les opérations dont tu as besoin ne sont pas applicables à un vector. Si c'est l'ordre qui t'intéresse, un set peut t'aider. Voir aussi make_heap et ses amis
Marsh Posté le 20-06-2005 à 15:09:06
Taz a écrit : ben utilise vector, vu que c'est que les opérations dont tu as besoin ne sont pas applicables à une priority_queue. Si c'est l'ordre qui t'intéresse, un set peut t'aider. Voir aussi make_heap et ses amis |
Petite faute je suppose
Merci pour cette reponse,
En effet l'ordre m'interesse, il s'agit ici de classer une serie de calques (A la maniere photoshop/gimp) qui seront ensuite lu en partant du premier jusqu'au dernier.
L'ordre est donc d'importance cruciale.
J'avais entendu parler de make_heap, je vais me renseigner un peu plus la dessus
Merci !
Marsh Posté le 20-06-2005 à 17:10:52
Re,
J'ai finalement decide d'implementer ma propre classe base sur les vector.
J'ai cependant un soucis assez etrange a la declaration d'un iterator de vector dans la fonction suivante:
Code :
|
Voici l'erreur de G++:
barney% make PriorityVector.o |
Sans les options -ansi et -pedantic:
barney% g++ -c PriorityVector.cpp |
P.S: J'ai adapte les numeros de lignes, car tout le .cpp n'est pas copie ici.
Ca compile correctement avec le compilateur C++ de Hewlett-packard.
Ai-je fait quelque chose qui ne soit pas a la norme ?
Merci d'avance!
Marsh Posté le 20-06-2005 à 17:53:53
t'as qu'à lire le topic sur typename. Moi je te conseille d'utiliser les fonctions make_heap et tout ça, et de cacher ça dans une classe si tu veux. Mais évite de réinventer la roue à tout recoder
Marsh Posté le 20-06-2005 à 18:24:44
Merci pour l'indication typename, ca compile maintenant.
En ce qui concerne la reinvention de la roue, je comprend tout a fait, mais mon code me suffit et je comprend mieux comment ca marche...
Merci a toi en tout cas!
Marsh Posté le 20-06-2005 à 18:50:29
oui il te suffit mais il est peu efficace. ça te demande très peu de travail !
Code :
|
simple non ?
Marsh Posté le 20-06-2005 à 19:07:07
Effectivement, vu comme ca !
Je vais essayer d'utiliser ca alors, merci encore pour ton aide c'est sympa
Marsh Posté le 20-06-2005 à 19:26:28
list bien la documentation, le pop est aussi simple que le push.
Marsh Posté le 20-06-2005 à 20:28:52
Re,
J'ai tout refait en utilisant les heap.
Je me retrouve neamoins confronte au meme probleme que je rencontrais avec ma methode, a savoir les erreures suivantes au link:
Test.o(.text+0x76): In function `main': |
Voici le code source des 3 fichiers:
PriorityVector.hpp:
Code :
|
PriorityVector.cpp:
Code :
|
Test.cpp:
Code :
|
Quelque chose ne va pas?
Encore merci !!
Marsh Posté le 20-06-2005 à 21:12:28
Et ça, ça ne convient pas ?
http://www.sgi.com/tech/stl/priority_queue.html
Marsh Posté le 20-06-2005 à 21:17:39
Lol tu as lu le premier post ?
Justement j'utilisais ca au debut, mais ca ne me convient pas tout a fait non
Merci quand meme
Marsh Posté le 20-06-2005 à 21:21:07
Oups, désolé.
Pour ton pb, il faut mettre le code de la classe template dans le .hpp, autrement dire coller le code de ton PriorityVector.cpp dans ton .hpp. C'est une restriction des compilos pour les templates (ou plus exactement du linker puisque celui-ci a besoin de classes "réelles", ce que ne sont pas les templates).
Bon, si je dis une connerie, Taz ne manquera pas de la relever...
Marsh Posté le 20-06-2005 à 22:52:31
pop(void); n'a aucun sens. Rien, ça s'écrit ()
ensuite ton pop qui renvoie une &, j'y crois pas trop
# template <typename T>
# T& CPriorityVector<T>::pop(void)
# {
# return std::pop_heap(this->m_Vec.begin(), this->m_Vec.end());
# }
surtout que pop_heap renvoie void ...
# int operator<(const CTest& x)
# {
# return x.prio < this->prio;
# }
foutage de gueule
# bool operator<(const CTest& x) const
# {
# return x.prio < this->prio;
# }
# ~CTest(){};
s'il est vide ben l'écris pas !
# CTest(int _prio){prio=_prio;};
beurl
# CTest(int _prio) : prio(_prio) { };
sinon elle est nulle ta notation de foutre des C partout, ça rime à rien.
Marsh Posté le 26-06-2005 à 17:29:34
Taz a écrit : sinon elle est nulle ta notation de foutre des C partout, ça rime à rien. |
Heu c'est la notation officielle MFC
Marsh Posté le 26-06-2005 à 18:27:55
ça rime à rien quoi. T'as qu'à foutre des v devant toutes les variables, des f devant les fonctions, des n devant les namespace, etc.
Marsh Posté le 26-06-2005 à 18:40:28
Pourquoi tu n'utilises pas la notation hongroise (je crois que c'est comme ça qu'elle s'appelle) avec des préfixes d'attributs m_sz, m_b, m_n et j'en passe?
Marsh Posté le 26-06-2005 à 18:51:10
ce qui y a de bien avec la notation hongroise, c'est les gens qui comprennes meme pas ce qu'ils écrivent. genre
string m_csz;
manque de bol, une string n'est pas terminée par un 0 ...
Marsh Posté le 26-06-2005 à 18:58:31
string m_strString ou CString m_strString
Génial même notation pour C++ et MFC!!
Marsh Posté le 20-06-2005 à 11:11:47
Bonjour,
J'ai besoin d'utiliser une priority_queue afin de classer une serie de classe (Ce qui fonctionne sans probleme).
Le sous-container (Ca s'appel comme ca?) utilise est un vector.
Mon probleme est le suivant:
Je souheterai lire le contenu du vector, mais sans le modifier, c'est-a-dire que je ne peux pas utiliser top() puis pop(), qui viderait le vector. Or il ne doit pas etre modifie.
Je dois aussi pouvoir supprimer une entree de mon choix, quelque soit sa position dans le vector.
Il n'existe pas d'iterator ni d'operator[] pour la priority_queue et ca m'embete franchement, de plus je ne suis pas encore tres a l'aise avec les STL.
Est-ce que quelqu'un aurait une idee ?
Merci