正如标题所说,我正在寻找一种在不修改原始向量的情况下对向量进行排序的方法。 我的第一个想法当然是在排序之前创建向量的副本,例如:
std::vector<int> not_in_place_sort(const std::vector<int>& original) { auto copy = original; std::sort(copy.begin(), copy.end()); return copy; }
然而,也许有一种更有效的方法来使用 C++ 标准算法执行排序(也许是sort and transform?)
sort
transform
使用partial_sort_copy。这是一个例子:
vector<int> v{9,8,6,7,4,5,2,0,3,1}; vector<int> v_sorted(v.size()); partial_sort_copy(begin(v), end(v), begin(v_sorted), end(v_sorted));
现在,v 保持不变,但 v_sorted 包含 {0,1,2,3,4,5,6,7,8,9}。