在 STL 中,inplace_merge 函数用于将两个有序集合合并为一个有序序列。前提是这 2 个有序序列的排序规则相同(要么都是升序,要么都是降序)。
并且最终借助该函数获得的新有序序列,其排序规则也和这 2 个有序序列相同。
#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 函数合并集合
#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
,如下图所示:
我们首先,使用了 inplace_merge 函数,合并了数组。
在 STL 中,inplace_merge 函数用于将两个有序集合合并为一个有序序列。前提是这 2 个有序序列的排序规则相同(要么都是升序,要么都是降序)。并且最终借助该函数获得的新有序序列,其排序规则也和这 2 个有序序列相同。