ในบทความนี้เราจะพูดถึงการทำงาน ไวยากรณ์และตัวอย่างของฟังก์ชัน list::merge() ใน C++
รายการใน STL คืออะไร
รายการเป็นโครงสร้างข้อมูลที่อนุญาตให้แทรกและลบเวลาคงที่ได้ทุกที่ตามลำดับ รายการถูกนำไปใช้เป็นรายการที่เชื่อมโยงเป็นสองเท่า รายการอนุญาตการจัดสรรหน่วยความจำที่ไม่ต่อเนื่องกัน List ทำการดึงการแทรกและย้ายองค์ประกอบได้ดีกว่าในตำแหน่งใดๆ ในคอนเทนเนอร์ มากกว่าอาร์เรย์ เวกเตอร์ และ deque ใน List การเข้าถึงองค์ประกอบโดยตรงนั้นช้าและ list นั้นคล้ายกับ forward_list แต่ออบเจกต์ของรายการส่งต่อเป็นรายการที่เชื่อมโยงเพียงรายการเดียว และสามารถทำซ้ำได้เพียงส่งต่อเท่านั้น
list::merge() คืออะไร
list::merge() เป็นฟังก์ชัน inbuilt ใน C++ STL ซึ่งประกาศไว้ในไฟล์ส่วนหัว 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 ไม่เช่นนั้นจะถือว่าไม่ถูกต้อง
ผลตอบแทนที่ได้รับ
ฟังก์ชันนี้ไม่ส่งคืนสิ่งใด
ไม่มีตัวเปรียบเทียบ
ตัวอย่าง
ในโค้ดด้านล่าง เรากำลังสร้างรายการที่เรียงลำดับแล้วสองรายการ และงานคือการผสานรายการและผลลัพธ์ที่ได้ก็ควรได้รับการจัดเรียงด้วย
#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