STL inplace_merge函数

STL inplace_merge函数算法

STL 中,inplace_merge 函数用于将两个有序集合合并为一个有序序列。前提是这 2 个有序序列的排序规则相同(要么都是升序,要么都是降序)。

并且最终借助该函数获得的新有序序列,其排序规则也和这 2 个有序序列相同。

STL inplace_merge函数详解

头文件

#include <algorithm>

语法

//默认采用升序的排序规则 void inplace_merge (BidirectionalIterator first, BidirectionalIterator middle, BidirectionalIterator last); //采用自定义的 comp 排序规则 void inplace_merge (BidirectionalIterator first, BidirectionalIterator middle, BidirectionalIterator last, Compare comp);

参数

参数 描述
first 输入迭代器
last 输入迭代器
middle 输入迭代器
comp 自定义排序规则

说明

其中,first、middle 和 last 都为双向迭代器,[first, middle) 和 [middle, last) 各表示一个有序序列。

技术细节

和 merge() 函数一样,inplace_merge() 函数也要求 [first, middle) 和 [middle, last) 指定的这 2 个序列必须遵循相同的排序规则,且当采用第一种语法格式时,这 2 个序列中的元素必须支持 < 小于运算符;同样,当采用第二种语法格式时,这 2 个序列中的元素必须支持 comp 排序规则内部的比较运算符。

不同之处在于,merge() 函数会将最终合并的有序序列存储在其它数组或容器中,而 inplace_merge() 函数则将最终合并的有序序列存储在 [first, last) 区域中。

案例

STL inplace_merge函数

使用 STL inplace_merge 函数合并集合

#include <iostream> #include <algorithm> using namespace std; int main() { cout << "嗨客网(www.haicoder.net)\n" << endl; int first[] = { 5,10,15,20,25,7,17,27,37,47,57 }; inplace_merge(first, first + 5,first +11); for (int i = 0; i < 11; i++) { cout << first[i] << " "; } cout << endl; return 0; }

我们在 Linux 下使用 g++ 进行编译,具体命令如下:

g++ inplace_merge.cpp -std=c++11

编译后,我们直接运行生成的二进制文件 a.out,如下图所示:

09_STL inplace_merge函数.png

我们首先,使用了 inplace_merge 函数,合并了数组。

STL inplace_merge函数总结

在 STL 中,inplace_merge 函数用于将两个有序集合合并为一个有序序列。前提是这 2 个有序序列的排序规则相同(要么都是升序,要么都是降序)。并且最终借助该函数获得的新有序序列,其排序规则也和这 2 个有序序列相同。