I have old code to maintain and I was replacing a custom QuickSort which was sorting two arrays based on array one with std::sort. Is there a way to sort two arrays based one one of them without an additional split step and without implementing a sorting function again? Below is the current example vector1D is basically std::vector.
vector1D<std::pair<int64_t, uint8_t>> m_RowCol(m_NX * m_NY * m_NZ);
//..
std::sort(
m_RowCol.begin(),
m_RowCol.end(),
[](const std::pair<int64_t, uint8_t> &a, const std::pair<int64_t, uint8_t> &b) { return a.first < b.first && a.first != 0; }
);
// copy into two vectors
vector1D<int64_t> m_Row;
vector1D<uint8_t> m_Col;
for (auto it = std::make_move_iterator(m_RowCol.begin()), end = std::make_move_iterator(m_RowCol.end()); it != end; ++it)
{
m_Row.push_back(std::move(it->first));
m_Col.push_back(std::move(it->second));
}
m_RowCol.clear();
Aucun commentaire:
Enregistrer un commentaire