Я хочу отсортировать собственные векторы по их собственным значениям, и я использую собственные. Я попробовал следующий пост ( Сортировка собственных векторов по их собственным значениям (связанная сортировка) ), но он не может быть скомпилирован с MS VisualStudio 2015.
Так что я полагаю, что это не может быть , что трудно. Мне просто нужно отсортировать по собственным значениям, отследить их старый и новый порядок, а затем прибегнуть к матрице собственных векторов.
Это хорошо работает в моем тестовом коде:
#include <algorithm>
struct a
{
double num1;
int num2;
};
bool acompare(a lhs, a rhs) { return lhs.num1 < rhs.num1; }
int demoSortWithStructure()
{
a array[5];
array[0].num1 = 1;
array[0].num2 = 1;
array[1].num1 = 5;
array[1].num2 = 2;
array[2].num1 = 3;
array[2].num2 = 3;
array[3].num1 = 2;
array[3].num2 = 4;
array[4].num1 = 4;
array[4].num2 = 0;
cout << "before sort" << endl;
for (int i = 0; i < 5; i++)
cout << array[i].num1 << "\t" << array[i].num2 << endl;
std::sort(array, array + 5, acompare);
cout << "\n\nafter sort" << endl;
for (int i = 0; i < 5; i++)
cout << array[i].num1 << "\t" << array[i].num2 << endl;
return 1;
}
Итак, я продолжил обобщать код следующим образом:
void MyClass::SortEigenValuesAndEigenMatrix(VectorXcd eigenvalue, MatrixXcd eigenvector)
{
VectorXcd eigenvalueOriginal = eigenvalue;
MatrixXcd eigenvectorOriginal = eigenvector;
int noValues = eigenvalue.rows();
a *array = new a[noValues];
for (int iValue = 0; iValue < noValues; iValue++)
{
array[iValue].index = iValue;
array[iValue].valueReal = eigenvalue(iValue).real();
}
sort(array[0],
array[noValues],
acompare);
for (int iValue = 0; iValue < noValues; iValue++)
{
int indexNew = array[iValue].index;
eigenvalue(iValue) = eigenvalueOriginal(indexNew);
eigenvector.col(iValue) = eigenvectorOriginal.col(indexNew);
}
}
Для контекста мои собственные значения и собственные векторы определены как сложные, но они являются реальными значениями. Итак, я просто беру реальное значение и собираюсь отсортировать на основе реальных (подписанных) значений.
Компилятор выдает следующую ошибку:
Severity Code Description Project File Line Suppression State
Error C2784 'std::complex<_Other> std::operator -(const _Ty &,const std::complex<_Other> &)': could not deduce template argument for 'const std::complex<_Other> &' from 'a' testRCWA d:\program files (x86)\microsoft visual studio 14.0\vc\include\algorithm 3203
Я не понимаю. Как компилятор может вывести использование
std::complex
А как насчет моего шаблона неясно? Я должен явно объявить тип при использовании сортировки? Почему это происходит в этом коде, а не когда он изолирован?