C ++ STL中的list merge()函数

在本文中,我们将讨论C ++中list::merge()函数的工作原理,语法和示例。

什么是STL中的列表?

列表是一种数据结构,允许按时间顺序在任意位置进行插入和删除。列表被实现为双向链接列表。列表允许非连续的内存分配。与数组,向量和双端队列相比,列表在容器中的任何位置执行元素的插入提取和移动效果更好。在列表中,对元素的直接访问很慢,并且列表类似于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-这是要合并的第二个列表的对象

  • 比较器-定义内部比较。这是一个二进制谓词,其中包含两个与列表容器中定义的值相同的输入,如果list_container1元素被认为位于list_container2之前,则返回true,否则它将为false。

返回值

此函数不返回任何内容。

没有比较器

示例

在下面的代码中,我们将创建两个排序列表,并且任务是合并列表,并且还应对结果输出进行排序。

#include <bits/stdc++.h>

using namespace std;

int main(){

   //创建排序列表

   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(){

   //创建一个列表

   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

以上是 C ++ STL中的list merge()函数 的全部内容, 来源链接: utcz.com/z/326778.html

回到顶部