2013-07-30 63 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来处理数据,那么可能会在运行时更快,我会转向它。 –