Computer >> Máy Tính >  >> Lập trình >> C ++

hàm merge () list trong C ++ STL

Trong bài viết này, chúng ta sẽ thảo luận về cách làm việc, cú pháp và các ví dụ của hàm list ::merge () trong C ++.

Danh sách trong STL là gì?

Danh sách là một cấu trúc dữ liệu cho phép chèn và xóa theo thời gian liên tục ở bất kỳ đâu theo trình tự. Danh sách được triển khai dưới dạng danh sách được liên kết kép. Danh sách cho phép phân bổ bộ nhớ không liền kề. Danh sách thực hiện trích xuất chèn và di chuyển phần tử ở bất kỳ vị trí nào trong vùng chứa tốt hơn so với mảng, vectơ và deque. Trong Danh sách, truy cập trực tiếp vào phần tử chậm và danh sách tương tự như forward_list, nhưng các đối tượng danh sách chuyển tiếp là danh sách được liên kết đơn và chúng chỉ có thể được lặp lại về phía trước.

list ::merge () là gì?

list ::merge () là một hàm có sẵn trong C ++ STL được khai báo trong tệp tiêu đề . merge () được sử dụng để hợp nhất hai danh sách thành một. Chúng tôi chỉ có thể hợp nhất hai danh sách hoặc nếu chúng tôi muốn có thêm so sánh, chúng tôi cũng có thể thêm một bộ so sánh.

Trước khi hợp nhất hai danh sách, chúng ta phải đảm bảo các danh sách được sắp xếp theo thứ tự. Nếu không có bộ so sánh nào được chuyển thì nó sẽ hợp nhất hai danh sách thành một danh sách đã được sắp xếp. Khi chúng ta cũng muốn so sánh nội bộ giữa hai danh sách thì chúng ta phải thêm bộ so sánh.

Cú pháp

list_container1.merge(list_container2); //will merge both lists in list_container1
list_container1.merge(list_container2, comparator);

Hàm này có thể chấp nhận một hoặc hai tham số -

Tham số

  • list_container2 - Đây là đối tượng của danh sách thứ hai sẽ được hợp nhất

  • so sánh - Điều này xác định một so sánh nội bộ. Đây là một vị từ nhị phân chứa hai đầu vào có giá trị giống như được xác định trong vùng chứa danh sách, nó trả về true nếu phần tử list_container1 được coi là đi trước list_container2, nếu không, phần tử này sẽ bằng.

Giá trị trả lại

Hàm này không trả về gì.

Không có bộ so sánh

Ví dụ

Trong đoạn mã dưới đây, chúng tôi đang tạo hai danh sách được sắp xếp và nhiệm vụ là hợp nhất các danh sách và kết quả đầu ra cũng phải được sắp xếp.

#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;
}

Ví dụ

Nếu chúng ta chạy đoạn mã trên, nó sẽ tạo ra kết quả sau

Lists after merging : 1 2 3 4 5 6 7 8

Với bộ so sánh

Ví dụ

Trong đoạn mã dưới đây, chúng tôi phải hợp nhất hai danh sách và sau đó sắp xếp danh sách đã tạo dưới dạng tài chính.

#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;
}

Đầu ra

Nếu chúng ta chạy đoạn mã trên, nó sẽ tạo ra kết quả sau

List Elements are : 1 2 3 4 5 6 7