在 STL 中,merge 函数用于将两个有序集合合并为一个有序序列。前提是这 2 个有序序列的排序规则相同(要么都是升序,要么都是降序)。并且最终借助该函数获得的新有序序列,其排序规则也和这 2 个有序序列相同。
#include <algorithm>
//以默认的升序排序作为排序规则
OutputIterator merge (InputIterator1 first1, InputIterator1 last1,
InputIterator2 first2, InputIterator2 last2,
OutputIterator result);
//以自定义的 comp 规则作为排序规则
OutputIterator merge (InputIterator1 first1, InputIterator1 last1,
InputIterator2 first2, InputIterator2 last2,
OutputIterator result, Compare comp);
参数 | 描述 |
---|---|
first1 | 输入迭代器 |
last1 | 输入迭代器 |
first2 | 输入迭代器 |
last2 | 输入迭代器 |
result | 输出迭代器 |
comp | 自定义排序规则 |
其中,first1、last1、first2 以及 last2 都为输入迭代器,[first1, last1) 和 [first2, last2) 各用来指定一个有序序列;result 为输出迭代器,用于为最终生成的新有序序列指定存储位置;comp 用于自定义排序规则。同时,该函数会返回一个输出迭代器,其指向的是新有序序列中最后一个元素之后的位置。
当采用第一种语法格式时,[first1, last1) 和 [first2, last2) 指定区域内的元素必须支持 < 小于运算符;同样当采用第二种语法格式时,[first1, last1) 和 [first2, last2) 指定区域内的元素必须支持 comp 排序规则内的比较运算符。
使用 STL merge 函数合并集合
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
int main()
{
cout << "嗨客网(www.haicoder.net)\n" << endl;
int first[] = { 5,10,15,20,25 };
int second[] = { 7,17,27,37,47,57 };
vector<int> myvector(11);
merge(first, first + 5, second, second + 6, myvector.begin());
for (vector<int>::iterator it = myvector.begin(); it != myvector.end(); ++it)
{
cout << *it << ' ';
}
cout << endl;
return 0;
}
我们在 Linux 下使用 g++ 进行编译,具体命令如下:
g++ merge.cpp -std=c++11
编译后,我们直接运行生成的二进制文件 a.out
,如下图所示:
我们首先,使用了 merge 函数,合并了两个数组。
在 STL 中,merge 函数用于将两个有序集合合并为一个有序序列。前提是这 2 个有序序列的排序规则相同(要么都是升序,要么都是降序)。并且最终借助该函数获得的新有序序列,其排序规则也和这 2 个有序序列相同。