首先,我有一个名为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 :(得分: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::vector
或std::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]; }
) ;