2013-07-30 118 views
0

首先,我有一個由數據填充的名爲Myarray[51][4]的int數組。將「矢量矢量」複製到「數組數組」中

對於基於的Myarray第二列排序它,我用下面的代碼(使用陣列轉換成矢量的矢量:my_vector[51][4]):

int Myarray [51][4]; 
vector< vector<int> > my_vector ; 
for(const auto& row : Myarray) 
    my_vector.push_back(vector<int>(begin(row), end(row))) ; 

sort(begin(my_vector), end(my_vector), 
     [](const vector<int>& a, const vector<int>& b) { return a[1] < b[1] ; }) ; 

此代碼已排序my_vector。現在我想再次將已排序的向量複製到Myarray中,以將它用作維數爲[51] [4]的整數數組。我該怎麼做?

+0

只是一個簡單的問題:你一定要第二個元素比較,而不是第一人? – stefan

+1

爲什麼不直接對數組進行排序呢? –

+1

'int myarray [51] [4]; sort(begin(Myarray),end(Myarray), [](int(&a)[4],int(&b)[4]){return a [1]

回答

4

最簡單和最明顯的一個:

for (size_t row = 0; row < my_vector.size(); ++row) { 
    for (size_t col = 0; col < my_vector[row].size(); ++col) { 
    Myarray[row][col] = my_vector[row][col]; 
    } 
} 

或無內環另一種解決方案:

for (size_t row = 0; row < my_vector.size(); ++row) { 
    copy(my_vector[row].begin(), my_vector[row].end(), Myarray[row]); 
} 

但使用更好的停在C++ C風格的數組,並切換到std::vectorstd::array徹底!

對於這裏的評論你的要求是std::vector一個例子:

vector<vector<int>> my_vector = {{3, 8, 7, 2}, {9, 12, 0, 4}, {12, 2, 14, 1}}; 
sort(begin(my_vector), end(my_vector), 
    [](const vector<int>& a, const vector<int>& b) { return a[1] < b[1]; } 
) ; 
+0

如果我想排序下面的數組是什麼代碼?int myarray [3] [4] = { {3,8,7,2}, { 12,0,4}, {12,2,14,1}。我想要:{12,2,14,1},{3,8,7,2},{9,12,0,4}。 –

+0

@MehdiTanhatalab,它比我最初認爲的難,因爲你不能複製數組。你將不得不寫你自己的排序功能。但更好的是堅持使用'std'容器,例如'的std :: VECTOR'。你爲什麼喜歡C風格的數組? –

+0

我一直在使用Visal Foxpro進行編程,直到現在還是一個C++初學者。在那裏,只有數組而不是矢量。這就是爲什麼我更瞭解陣列。如果你推薦使用vector來處理數據,那麼可能會在運行時更快,我會轉向它。 –