2010-10-07 12 views
1

J'essaie de faire un tri de fusion dans cpp sur un vecteur appelé x, qui contient des coordonnées x. Comme le mergesort trie les coordonnées x, il est supposé déplacer les éléments correspondants dans un vecteur appelé y, contenant les coordonnées y. le seul problème est que je ne sais pas comment (ou si je peux) renvoyer les deux vecteurs résultants de la fonction de fusion. si alternativement il est plus facile à implémenter je pourrais utiliser une méthode de tri plus lente.est-il possible de renvoyer deux vecteurs d'une fonction?

+1

Attendez, vous avez des vecteurs séparés pour x et y? Pourquoi pas un seul vecteur de coordonnées? – JoshD

Répondre

1

Essayez quelque chose comme ceci:

struct Point { 
    int x; 
    int y; 
    operator <(const Point &rhs) {return x < rhs.x;} 
}; 

vector<Point> my_points. 

mergesort(my_points); 

Ou si vous voulez trier des points avec la même valeur x par l'y cordinate:

Aussi, je pensais que je voudrais ajouter, si vous avez vraiment jamais besoin à, vous pouvez toujours retourner un std::pair. Un meilleur choix est généralement de revenir à travers les paramètres de la fonction.

operator <(const Point &rhs) {return (x < rhs.x || x == rhs.x && y < rhs.y);} 
+0

Ironique - un vecteur de vecteurs ... –

+0

@Preet Sangha: :) Oui en effet. – JoshD

+0

Merci. Le problème est la façon dont j'obtiens les coordonnées et la meilleure façon pour mon application est de les séparer. est possible d'avoir une structure avec les deux vecteurs, triés par coordonnées y, puis avoir la fonction de fusion créer une nouvelle structure qui a les nouveaux vecteurs, triés par x? ou avoir la fonction changer une structure existante. – user468825

1

Non, vous ne pouvez pas renvoyer 2 résultats d'une méthode comme dans cet exemple.

vector<int>, vector<int> merge_sort(); 

Qu'est-ce que vous pouvez faire est de passer 2 vecteurs par référence à une fonction et la résultante vecteur mergesorted affecte les 2 vecteurs ... par exemple

void merge_sort(vector<int>& x, vector<int>& y); 

En fin de compte, vous pouvez faire ce que @JoshD mentionné et créer un point appelé struct et fusionner le vecteur de la structure de point à la place.

0

Retourner des vecteurs n'est probablement pas ce que vous voulez, car ils sont copiés à cette fin (ce qui est lent). Jetez un oeil à this implementation, par exemple.