Zamapuj macierz Eigen na macierz C

Ostatnio zacząłem używaćEigen biblioteka. Mam pytanie o mapowanie macierzy Eigen na tablicę C / C ++. Macierz Eigen jest domyślnie kolumną wyróżnioną. Więc jeśli użyję następującego kodu do mapowania macierzy na tablicę C / C ++,

double a[10];
double *p = &a[0];
MatrixXd(2,5) m;
for (int i=0; i<2;i++)
    for (int j=0; j<5;j++)
        m(i,j) = i+j;
cout<<m<<endl;
Eigen::Map<MatrixXd>(p,2,5) = m;
for (int i=0; i<10; i++)
    cout<<a[i]<<" ";
cout<<endl;

Dane wyjściowe to:

0 1 2 3 4
1 2 3 4 5
0 1 1 2 2 3 3 4 4 5

Jeśli zmienię definicję m jako wiersz główny:

Matrix <double,2,5,RowMajor> m;

spodziewałem się, że wyjście wygląda tak:

0 1 2 3 4
1 2 3 4 5
0 1 2 3 4 1 2 3 4 5

Ale tak naprawdę wynik był taki sam jak pierwszy. Moje pytanie brzmi: czy istnieje sposób odwzorowania macierzy Eigen na tablicę C / C ++, aby dane tablicy były oparte na wierszach?

Odkryłem, że mogę użyć funkcji memember matrix.data (), aby uzyskać pożądany wynik, ale zastanawiam się, czy mogę zrobić tę mapę użycia:

Użyj funkcji matrix.data ():

double a[10];
double *p = &a[0];
Matrix <double,2,5,RowMajor> m;
for (int i=0; i<2;i++)
    for (int j=0; j<5;j++)
        m(i,j) = i+j;
double *p1 = m.data();
for (int i=0; i<10; i++)
    cout<<p1[i]<<" ";
cout<<endl;

questionAnswers(1)

yourAnswerToTheQuestion