Есть матрица в виде массива new T[cCols*cRows] по строчная (строка1, строка2, ...). Как бы ее сортировать посредством std::sort? Есть ли что готовое на эту тему? Или же std::qsort использовать?
======================================================
UPD: В среднем алгоритм получился такой (здесь писалось без проверки, у меня другие классы):
void M::sortByCol(uint iCol) {
vector<pair<uint,uint>> listIdx;
// first - откуда взять после сортировки,
// second - куда поместить (обратный индекс)
for (uint ii = 0; ii < cRows; ++ii)
listIdx.push_back({ii,0});
std::sort(listIdx.begin(), listIdx.end(),
[&](const auto &p1, const auto &p2) -> bool {
return getData(iCol, p1.first) < getData(iCol, p2.first); });
for (uint ii = 0; ii < cRows; ++ii)
listIdx[listIdx[ii].first].second = ii; // обратный индекс
for (uint ii = 0; ii < cRows-1; ++ii) {
auto &p = listIdx[ii];
uint iSrc = p.first; // откуда берется в тек.строку
if (iSrc == ii) continue;
swapRows(ii, iSrc);
listIdx[p.second].first = iSrc; // а прежние данные после будут
listIdx[iSrc].second = p.second; // браться уже отсюда.
}
}
Как здесь упоминалось, колонку сортировки можно так же предварительно сложить в вектор для сортировки для ускорения, но это уже по желанию и необходимости.