Tri vecteur de point 3D par abscisse - C++ - Programmation
Marsh Posté le 03-12-2009 à 19:48:49
Funkyfonk a écrit : |
oui en lui passant un foncteur effectuant le test sur la compsoante qui t'interesse.
Marsh Posté le 03-12-2009 à 20:38:01
Pour faire le tri sur ton vector tu peux utiliser ça :
Code :
|
Marsh Posté le 04-12-2009 à 10:48:20
Pourquoi ne pas simplement implementer l`operateur < dans la classe PointType ?
Marsh Posté le 04-12-2009 à 10:52:07
kirua_sama a écrit : Pourquoi ne pas simplement implementer l`operateur < dans la classe PointType ? |
Semantiquement, pourquoi operator< testerait=il seulement l'abcisse ?
<moment prog. generique>
le bon plan serait d'avoir une class de predicat tempalte genre :
Code :
|
</moment prog. generique>
Marsh Posté le 04-12-2009 à 11:27:32
Effectivement, lu trop vite.
Ca resterait semantique que dans le cas on l`on aurait la norme |0P.
Sinon, juste une petite question dans ton cas pourquoi eviter le switch ?
Marsh Posté le 04-12-2009 à 13:50:34
c moche les switch qd tu renvoit un truc qui se calcul en 1 cylce
Marsh Posté le 04-12-2009 à 18:31:50
Je vous remercie pour toutes vos réponses.
Comme je l'ai mentionné, je suis novice en c++.
Alors j'ai testé une des solution proposé avec le sort mais je ne sais pas comment récupérer les indices;
bool monComparateurLess(PointType p1, PointType p2)
{
if (p1[0]<p2[0])
return true;
else
return false;
}
sort(vect.begin(), vect.end()-1, monComparateurLess(vect[vect.begin()],vect[vect.begin()+1]);
J'ai testé ceci mais en vain
Marsh Posté le 04-12-2009 à 19:16:07
goto la doc :
http://www.sgi.com/tech/stl/functors.html
y a un exemple avec sort
Marsh Posté le 06-12-2009 à 19:05:56
Merci pour ce lien.
J'ai compris le fonctionnement de sort pour trier un vecteur d'entier.
Je ne vois pas comment l'employer pour trier un vecteur de point en fonction
de l'abscisse.
Marsh Posté le 06-12-2009 à 19:15:17
t'as lu jusqu'en bas ? y a un exemple sur les doubles :€
et je vois pas ce qui est difficile à comprendre dans
Code :
|
Marsh Posté le 03-12-2009 à 19:43:40
Salut les djeuns,
j'ai une difficulté à surmonté. Je souhaite trier un vector<PointType> monVecteur par abscisse croissante ou decroissante, peu importe.
PointType est un type défini sous ITK ainsi typedef itk::Point<double,3> PointType;
- Peux t'on employer la fonction sort de std vector pour trier un vecteur à 3 dimension en fonction d'une des composantes?
- Qu'elle serait la façon la plus rapide de trier ce vecteur de points en fonction des abscisses.
- J'ai tenté de faire un tri bulle mais ça cloche. Je suis encore un novice en c++ donc probable que je m'y prenne mal au niveau des structures de données.
Le résultat ne me parait pas correcte non plus? Merci de m'apporter vos lumières
void echanger(vector<PointType> tableau, const int i, const int j)
{
int temporaire1,temporaire2,temporaire3;
temporaire1 = tableau[i][0];
temporaire2 = tableau[i][1];
temporaire3 = tableau[i][2];
tableau[i][0] = tableau[j][0];
tableau[i][1] = tableau[j][1];
tableau[i][2] = tableau[j][2];
tableau[j][0] = temporaire1;
tableau[j][1] = temporaire2;
tableau[j][2] = temporaire3;
}
void triABulle(vector<PointType> tableau,int longueur)
{
bool permutation;
do
{
permutation = false;
for(int i=0; i<longueur-1; i++)
{
if(tableau[i][0]>tableau[i+1][0])
{
echanger(tableau, i, i+1);
permutation = true;
}
}
longueur--;
}
while(permutation);
}