将“矢量矢量”复制到“数组数组”中

时间:2013-07-30 12:43:06

标签: c++ arrays vector

首先,我有一个名为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]的整数数组。我该怎么做?

1 个答案:

答案 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::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]; }
) ;