【发布时间】:2017-05-17 14:32:46
【问题描述】:
我有旧代码要维护,我正在替换一个自定义 QuickSort,该 QuickSort 使用 std::sort 根据数组 1 对两个数组进行排序。有没有一种方法可以根据其中一个数组对两个数组进行排序,而无需额外的拆分步骤并且无需再次实现排序功能?下面是当前示例 vector1D 基本上是 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 && b.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();
【问题讨论】:
-
请注意,尽管您的比较器不满足严格的弱排序要求,但您的程序会表现出未定义的行为。具体来说,0等价于1,0等价于2,但1不等价于2。
-
@Igor 谢谢你
-
我想避免使用第 3 方库。 Boost 可能会起作用。
-
你更新的比较器仍然有同样的问题。