STL merge函数

STL merge函数算法

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

STL merge函数详解

头文件

#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函数

使用 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,如下图所示:

08_STL merge函数.png

我们首先,使用了 merge 函数,合并了两个数组。

STL merge函数总结

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