2010-10-07 93 views
1

我試圖做一個合併排序在一個稱爲x的矢量,其中包含x座標cpp中的合併排序。當mergesort對x座標進行排序時,它應該將相應的元素移動到名爲y的矢量中,其中包含y座標。唯一的問題是,我不知道如何(或者如果我可以)從合併函數返回兩個結果向量。 或者,如果它更容易實現,我可以使用較慢的排序方法。是否有可能從函數返回兩個向量?

+1

等等,你有單獨的向量爲x和y?爲什麼不是一個單一的座標矢量? – JoshD 2010-10-07 08:04:17

回答

1

嘗試這樣:

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

vector<Point> my_points. 

mergesort(my_points); 

或者,如果你想用點由Y cordinate等於x值進行排序:

而且,我想我要補充,如果你真的永遠需要到,您可以一直返回std::pair。更好的選擇通常是通過函數參數返回。

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

諷刺 - 矢量矢量... – 2010-10-07 08:10:09

+0

@Preet Sangha::)是的。 – JoshD 2010-10-07 08:15:06

+0

謝謝。問題是我獲得座標的方式,我的應用程序的最佳方式是將它們分開。 可能有一個結構與兩個向量,按y座標排序,然後讓合併函數創建一個新的結構,具有新的向量,按x?或者讓函數改變現有的結構。 – user468825 2010-10-07 08:28:35

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

相關問題