2016-09-17 101 views
0

我想排序2D矢量(10x100)內的數字。C++ 2D矢量排序

我的想法是首先按行排序,然後在第一列中找到最小的數字並將其保存在一個新的一維向量中,然後刪除列中最小的一個,依此類推直到最後一個數字。

我的代碼是這樣的,但它不起作用。

vector <vector <int> > vec(10, vector <int> (0));// already sorted by rows. 
vector <int> datafinal; 

for(int row=0; row < vec.size(); row++){ 
    int mini = vec[0][0]; 
    if (vec[row][0]< mini) { 
     datafinal.push_back(mini); 
     vec[row].erase(vec[row].begin()); 
    } 
} 

for (int k=0; k< datafinal.size(); k++){ 
    cout << datafinal[k] << endl; 
} 
+0

你的邏輯似乎從根本上被打破。由於每行可能有同一行具有最小值,因此最終該行將完全爲空,而其餘行保持不變。在第一列中將不再是「最小的一個」,因爲根據定義,其中一行將是空的,並且您的邏輯將導致未定義的行爲。所顯示的代碼也有一個明顯的錯誤,但由於您的整體邏輯看起來相當破碎,這是一個有爭議的問題。首先找出正確的邏輯,然後開始執行實施。 –

+0

你能告訴我一些邏輯嗎?我只是一個初學者。 – Juliusameri

+0

不幸的是,只有你知道你需要對矩陣進行排序的邏輯。我不知道你的矩陣是什麼,以及你打算如何使用它。儘管你可能是C++的初學者,但這與C++無關。在C++,Java,Python,Perl或任何其他語言中實現***的邏輯是一樣的。首先,您需要以邏輯的方式定義您需要如何對矩陣進行排序。只有將它翻譯成代碼。 –

回答

0

根據您的問題和邏輯的例子,我覺得這是你想要做什麼:

  • 你渴望這樣,閱讀從左至右排序整個矩陣/ 2D矢量右上角和下方的martix/2d矢量將按升序/降序讀取。

在這種情況下,您可以將整個矩陣/ 2d向量視爲用於排序的一組N個元素,但您必須確保以2d格式正確放置/替換數據。

這方面的一個例子是:

[3,5,1]
[1,3,1]
[12,4,1]

這可以被作爲標準處理array/vector如果您將其表示爲:[3,5,1,3,1,12,4,1]

通過將其作爲標準數組/矢量處理,功能集。

然後爲了將它轉換回矩陣/ 2d格式,您可以遍歷整個集合,並且每次讀取構成第N行大小的元素數量時,您都會移動到一個新的行。

+0

爲什麼?價值的含義是什麼?它是如何使用的?你是否只需要整個數組的最小值?或者每行/列的最小值是否有一些意義? – Holmz