C++ STL 中的 list merge() 函数
在本文中,我们将讨论 C++ 中 list::merge() 函数的工作原理、语法和示例。
什么是 STL 中的 List?
List 是一种数据结构,允许在序列中的任何位置进行常数时间的插入和删除操作。列表实现为双向链表。列表允许非连续内存分配。与数组、向量和双端队列相比,列表在容器中任何位置执行元素的插入、提取和移动操作的效率更高。在列表中,直接访问元素的速度很慢,列表类似于 forward_list,但 forward_list 对象是单向链表,只能向前迭代。
什么是 list::merge()?
list::merge() 是 C++ STL 中一个内置函数,声明在 <list> 头文件中。merge() 用于将两个列表合并成一个。我们可以简单地合并两个列表,或者如果需要额外的比较,我们还可以添加一个比较器。
在合并两个列表之前,我们必须确保列表已排序。如果没有传递比较器,则它会将两个列表合并成一个排序后的列表。如果我们还需要两个列表之间的内部比较,则必须添加比较器。
语法
list_container1.merge(list_container2); //will merge both lists in list_container1 list_container1.merge(list_container2, comparator);
此函数可以接受一个或两个参数:
参数
list_container2 − 这是要合并的第二个列表的对象
comparator − 定义内部比较。这是一个二元谓词,包含两个与列表容器中定义的相同值的输入,如果 list_container1 元素被认为在 list_container2 之前,则返回 true,否则返回 false。
返回值
此函数不返回任何值。
无比较器
示例
在下面的代码中,我们创建了两个排序的列表,任务是合并这些列表,并且生成的输出也应该是排序的。
#include <bits/stdc++.h> using namespace std; int main(){ //creating the sorted list list<int> myList_1 = {2, 4, 6, 8 }; list<int> myList_2 = {1, 3, 5, 7 }; //using merge() function to merge the lists myList_2.merge(myList_1); cout <<"Lists after merging : "; for(auto i = myList_2.begin(); i != myList_2.end(); ++i) cout << *i << " "; return 0; }
示例
如果我们运行上面的代码,它将生成以下输出
Lists after merging : 1 2 3 4 5 6 7 8
使用比较器
示例
在下面的代码中,我们必须合并两个列表,然后将生成的列表排序作为最终输出。
#include <bits/stdc++.h> using namespace std; bool compare(int myList_1, int myList_2){ return ( int(myList_1)<int(myList_2) ); } int main(){ //create a list list<int> myList_1 = {2, 4, 1 }; list<int> myList_2 = {7, 6, 5 }; myList_1.sort(); myList_2.sort(); //using merge() function to merge the lists myList_1.merge(myList_2); myList_2.push_back (3); myList_1.merge(myList_2,compare); cout<<"List Elements are : "; for(auto i = myList_1.begin(); i!=myList_1.end(); ++i) cout<< ' ' << *i; return 0; }
输出
如果我们运行上面的代码,它将生成以下输出
List Elements are : 1 2 3 4 5 6 7
广告