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] 的整数数组。我该怎么做?

4

1 回答 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]; }
) ;
于 2013-07-30T12:54:49.840 回答