2010-10-07 2 views
1

Im пытается сделать сортировку слияния в cpp на векторе с именем x, который содержит x координат. Поскольку mergesort сортирует координаты x, он должен перемещать соответствующие элементы в векторе y, содержащем y-координаты. единственная проблема в том, что я не знаю, как (или, если я могу) вернуть оба результирующих вектора из функции слияния. , если его проще реализовать, я мог бы использовать более медленный метод сортировки.Можно ли вернуть два вектора из функции?

+1

Подождите, у вас есть отдельные векторы для x и y? Почему не один вектор координат? – JoshD

ответ

1

попробовать что-то вроде этого:

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

vector<Point> my_points. 

mergesort(my_points); 

Или, если вы хотите отсортировать точек с одинаковым значением х по у cordinate:

Кроме того, я думал, что я хотел бы добавить, что если вы действительно когда-нибудь понадобится вы всегда можете вернуть std::pair. Лучшим выбором обычно является возврат через параметры функции.

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

Ирония - вектор векторов ... –

+0

@Preet Sangha: :) Да, действительно. – JoshD

+0

Спасибо. Проблема в том, как я получаю координаты, и лучший способ для моего приложения - отделить их. возможно иметь структуру с двумя векторами, отсортированную по координатам y, а затем функцию слияния создать новую структуру, которая имеет новые векторы, отсортированные по x? или изменить функцию существующей структуры. – user468825

1

Нет, вы не можете вернуть 2 результата из метода, подобного в этом примере.

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

Что вы можете сделать, это передать 2 вектора по ссылке на функции и результирующий вектор mergesorted влияет на 2 вектора ... например

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

В конечном счете, вы можете делать то, что @JoshD упоминается и создайте struct называемую точку и сгруппируйте сортировку вектора точечной структуры.

0

Возвращаемые векторы скорее всего не то, что вы хотите, поскольку они скопированы для этой цели (что медленно). Посмотрите, например, на this implementation.

Смежные вопросы