C++ 算法 partial_sort_copy()

2024年8月30日 | 5分钟阅读

C++ 算法 partial_sort_copy() 函数类似于 partial_sort() 函数,用于重新排列范围 [first, last) 中的元素,使得 first 和 middle 之间的元素已排序,而 middle 和 last 之间的元素保持未指定顺序。但 partial_sort_copy() 函数将结果放入新的范围 [result_first, result_last) 中。

第一个版本使用运算符 < 比较元素,第二个版本使用 comp 比较元素。

语法

参数

first:一个输入迭代器,指向要部分排序的源范围中的第一个元素。

last:一个随机访问迭代器,指向要部分排序的源范围中最后一个元素的后一个位置。

result_first:一个随机访问迭代器,指向已排序目标范围中的第一个元素。

result_last:一个随机访问迭代器,指向已排序目标范围中最后一个元素的后一个位置。

comp:一个用户定义的二元谓词函数,接受两个参数,如果这两个参数有序则返回true,否则返回false。它遵循严格的弱排序来对元素进行排序。

返回值

它返回一个迭代器,指向结果序列中写入的最后一个元素之后的元素。

复杂度

平均复杂度小于 first 和 last 之间距离的对数线性。执行多达 N*log (min (N, M)) 次元素比较,其中 N = last - first,M = middle - first。

数据竞争

范围 [first, last) 中的对象会被更改。

异常

如果任何元素比较、元素交换(或移动)或迭代器操作抛出异常,此函数将抛出异常。

请注意,无效参数会导致未定义行为。

示例 1

让我们看一个简单的例子来演示 partial_sort_copy() 的用法

输出

myvector contains: 1 2 3 4 5

示例 2

让我们看另一个默认版本的简单示例

输出

Before calling partial_sort_copy

Numbers { 4 10 70 30 10 69 96 7  }

After calling partial_sort_copy

Numbers { 4 10 70 30 10 69 96 7  }

Result { 4 7 10 10  }

示例 3

让我们看一个自定义(谓词)版本的简单示例

输出

Before calling partial_sort_copy

Numbers { 4 10 70 30 10 69 96 7  }

After calling partial_sort_copy

Numbers { 4 10 70 30 10 69 96 7  }

Result { 4 7 10 10  }

示例 4

让我们看另一个例子

输出

v0 : 4 2 5 1 3 
v1 : 10 11 12 
v2 : 10 11 12 13 14 15 16 
Writing v0 to v1 in ascending order gives: 1 2 3 
Writing v0 to v2 in descending order gives: 5 4 3 2 1 15 16

下一主题C++ 算法