Можно ли вернуть два вектора из функции? - PullRequest
2 голосов
/ 07 октября 2010

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

Ответы [ 3 ]

3 голосов
/ 07 октября 2010

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

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

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

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

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

1 голос
/ 07 октября 2010

Попробуйте что-то вроде этого:

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

vector<Point> my_points.

mergesort(my_points);

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

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

  operator <(const Point &rhs) {return (x < rhs.x || x == rhs.x && y < rhs.y);}
0 голосов
/ 07 октября 2010

Возвращение векторов, скорее всего, не то, что вам нужно, так как они копируются для этой цели (что медленно). Взгляните на эту реализацию , например.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...