ในบรรดาการดำเนินการมากมายสำหรับ 'std::map' ฟังก์ชัน 'ลบ' มีความโดดเด่นในฐานะเครื่องมือสำคัญในการลบองค์ประกอบตามคีย์ “std::map” เป็นคอนเทนเนอร์แบบเชื่อมโยงที่มีการจัดระเบียบที่ประกอบด้วยคู่คีย์-ค่า การจัดเรียงองค์ประกอบภายใน “std::map” จะถูกจัดเรียงอย่างสม่ำเสมอตามคีย์ ซึ่งอำนวยความสะดวกในการดำเนินการที่มีประสิทธิภาพ เช่น การค้นหา การแทรก และการลบตามค่าคีย์
ภายในขอบเขตของ C++ ฟังก์ชัน “std::map::erase” ทำหน้าที่เป็นฟังก์ชันสมาชิกของคลาส “std::map” ทำให้สามารถกำจัดองค์ประกอบเฉพาะออกจากแผนที่ได้ มีหลากหลายรูปแบบ ให้ความยืดหยุ่นในการระบุองค์ประกอบที่จะลบ ในบทความนี้ เราจะเจาะลึกรายละเอียดของ “std::map::erase” โดยมีตัวอย่างมากมายเพื่อแสดงให้เห็นถึงความอเนกประสงค์
ตัวอย่างที่ 1: การลบด้วยคีย์
ความสามารถในการลบองค์ประกอบด้วยการคีย์ใน “std::map” เป็นคุณสมบัติพื้นฐานที่มีให้ในไลบรารีเทมเพลตมาตรฐาน C++ โดยทั่วไปการดำเนินการนี้จะใช้เมื่อคุณต้องการจัดการและจัดการคู่คีย์-ค่าในโปรแกรม และให้วิธีที่สะดวกในการลบองค์ประกอบเฉพาะตามคีย์ เราจะสร้างตัวอย่างเพื่อสาธิตวิธีใช้ “std::map” เพื่อสร้างแผนที่ ลบองค์ประกอบด้วยคีย์ จากนั้นจึงแสดงแผนที่ที่แก้ไข
#รวม
#รวม <แผนที่>
int หลัก ( ) {
มาตรฐาน::แผนที่ < int, std::string > แผนที่ของฉัน;
แผนที่ของฉัน [ 1 ] = 'สีแดง' ;
แผนที่ของฉัน [ 2 ] = 'สีฟ้า' ;
แผนที่ของฉัน [ 3 ] = 'สีเขียว' ;
myMap.ลบ ( 2 ) ;
สำหรับ ( เชื่อมต่ออัตโนมัติ & คู่ : myMap ) {
มาตรฐาน::cout << คู่แรก << ':' << คู่.วินาที << มาตรฐาน::endl;
}
กลับ 0 ;
}
ในตัวอย่างนี้ เราเริ่มต้นด้วยการรวมไลบรารีมาตรฐาน C++ ที่จำเป็น เช่น
เพื่อแสดงสถานะผลลัพธ์ของแผนที่ เราใช้ลูป 'for' ที่วนซ้ำคู่คีย์-ค่าแต่ละคู่ภายใน 'myMap' เราใช้วัตถุ “std::cout” ภายในลูปเพื่อพิมพ์คู่คีย์-ค่าแต่ละคู่ไปยังคอนโซล สุดท้าย คำสั่ง 'return 0' จะสรุปฟังก์ชัน 'main' ซึ่งเป็นสัญญาณบ่งชี้ถึงการดำเนินการโปรแกรมของเราที่ประสบความสำเร็จ
เอาต์พุตจะแสดงคู่คีย์-ค่าที่เหลือใน “std::map” หลังจากที่องค์ประกอบที่มีคีย์ 2 (“สีน้ำเงิน”) ถูกลบ ซึ่งส่งผลให้เอาต์พุต “1: สีแดง” และ “3: สีเขียว”
ตัวอย่างที่ 2: การลบโดย Iterator
ในภาษา C++ ตัววนซ้ำคืออ็อบเจ็กต์ที่อำนวยความสะดวกในการนำทางองค์ประกอบภายในคอนเทนเนอร์ ซึ่งเป็นช่องทางในการเข้าถึง แก้ไข หรือลบองค์ประกอบ ฟังก์ชัน “std::map::erase” สามารถใช้กับตัววนซ้ำเพื่อลบองค์ประกอบต่างๆ ได้
นี่คือตัวอย่าง:
#รวม#รวม <แผนที่>
int หลัก ( ) {
มาตรฐาน::แผนที่ < int, std::string > โฟลเดอร์ผลไม้;
โฟลเดอร์ผลไม้ [ 1 ] = 'มะม่วง' ;
โฟลเดอร์ผลไม้ [ 2 ] = 'ส้ม' ;
โฟลเดอร์ผลไม้ [ 3 ] = 'สัปปะรด' ;
โฟลเดอร์ผลไม้ [ 4 ] = 'องุ่น' ;
อัตโนมัติ = FruitMap.find ( 2 ) ;
ถ้า ( มัน ! = FruitMap.end ( ) ) {
FruitMap.ลบ ( มัน ) ;
}
สำหรับ ( เชื่อมต่ออัตโนมัติ & คู่ : FruitMap ) {
มาตรฐาน::cout << คู่แรก << ':' << คู่.วินาที << มาตรฐาน::endl;
}
กลับ 0 ;
}
รหัส C++ ที่ให้มาเริ่มต้นด้วยการประกาศ 'std::map' ชื่อ 'fruitMap' เพื่อจัดเก็บคู่คีย์-ค่า โดยเชื่อมโยงจำนวนเต็มกับชื่อผลไม้ที่สอดคล้องกัน เราเติมข้อมูลในแผนที่ด้วยรายการผลไม้ที่แตกต่างกันสี่ชนิด: 'มะม่วง', 'ส้ม', 'ไพน์แอปเปิ้ล' และ 'องุ่น' หลังจากนั้น เราใช้ฟังก์ชัน 'ค้นหา' เพื่อรับตัววนซ้ำ (มัน) ที่ชี้ไปยังองค์ประกอบที่มีค่าคีย์ 2 ภายใน 'fruitMap' จากนั้น เราจะตรวจสอบว่าตัววนซ้ำไม่เท่ากับ “end()” หรือไม่ เพื่อให้แน่ใจว่าองค์ประกอบที่มีคีย์ที่ระบุนั้นมีอยู่ในแผนที่
ในบล็อกแบบมีเงื่อนไข เราจะลบองค์ประกอบที่ตัววนซ้ำ 'it' ชี้ไปโดยใช้ฟังก์ชัน 'ลบ' สุดท้ายนี้ เราจะวนซ้ำองค์ประกอบที่เหลือใน 'fruitMap' ที่ถูกแก้ไขโดยใช้ลูป 'for'
ผลลัพธ์สุดท้ายจะแสดงเนื้อหา 'fruitMap' ที่แก้ไขหลังจากการลบ
ตัวอย่างที่ 3: การลบช่วง
คอนเทนเนอร์ “std::map” ใน C++ มอบวิธีที่สะดวกในการลบองค์ประกอบภายในช่วงที่ระบุ ฟังก์ชัน 'ลบ' ช่วยให้คุณสามารถลบองค์ประกอบออกจากแผนที่โดยอิงตามตัววนซ้ำที่แสดงถึงจุดเริ่มต้นและจุดสิ้นสุดของช่วงที่จะถูกลบ
ตอนนี้ เรามาสำรวจแนวคิดของการลบช่วงโดยใช้ “std::map” ด้วยตัวอย่าง:
#รวม#รวม <แผนที่>
int หลัก ( ) {
มาตรฐาน::แผนที่ < int, std::string > แผนที่ใหม่;
แผนที่ใหม่ [ 1 ] = 'ม้า' ;
แผนที่ใหม่ [ 2 ] = 'สิงโต' ;
แผนที่ใหม่ [ 3 ] = 'เสือ' ;
แผนที่ใหม่ [ 4 ] = 'แมว' ;
newMap.ลบ ( newMap.lower_bound ( 2 ) , newMap.upper_bound ( 3 ) ) ;
สำหรับ ( เชื่อมต่ออัตโนมัติ & คู่ : newMap ) {
มาตรฐาน::cout << คู่แรก << ':' << คู่.วินาที << มาตรฐาน::endl;
}
กลับ 0 ;
}
โปรแกรมเริ่มต้นด้วยการประกาศ 'std::map' ชื่อ 'newMap' ซึ่งเชื่อมโยงคีย์จำนวนเต็มกับค่าสตริงที่สอดคล้องกัน หลังจากนั้น เราจะเติมข้อมูลแผนที่ด้วยคู่คีย์-ค่าโดยใช้ตัวดำเนินการวงเล็บเหลี่ยม ตัวอย่างเช่น เรากำหนดคู่คีย์-ค่าของ (1, “ม้า”), (2, “สิงโต”), (3, “เสือ”) และ (4, “แมว”) ให้กับ “newMap”
การดำเนินการที่สำคัญถัดไปเกี่ยวข้องกับการใช้ตัววนซ้ำเพื่อลบองค์ประกอบออกจากแผนที่ ฟังก์ชันการลบใช้กับอาร์กิวเมนต์ 'newMap.lower_bound(2)' และ 'newMap.upper_bound(3)' วิธีนี้จะลบองค์ประกอบที่มีคีย์ที่อยู่ในช่วง (2, 3) กล่าวอีกนัยหนึ่ง มันจะลบรายการ 'Lion' และ 'Tiger' ออกจากแผนที่ หลังจากการดำเนินการนี้ แผนที่จะประกอบด้วยองค์ประกอบที่มีปุ่ม 1 และ 4 เท่านั้น ซึ่งสอดคล้องกับ 'ม้า' และ 'แมว'
สุดท้ายนี้ เราใช้ลูป 'for' ตามช่วงเพื่อวนซ้ำองค์ประกอบที่เหลือในแผนที่และพิมพ์คู่คีย์-ค่าไปยังคอนโซล
ผลลัพธ์ที่ได้จะแสดงดังต่อไปนี้:
ตัวอย่างที่ 4: การลบตามภาคแสดง
การลบตามภาคแสดงหมายถึงการลบองค์ประกอบออกจากโครงสร้างข้อมูล เช่น คอนเทนเนอร์ ตามเงื่อนไขหรือเกณฑ์ที่ระบุ “std::map::erase” ยังสามารถใช้กับฟังก์ชันเพรดิเคตเพื่อลบองค์ประกอบตามเงื่อนไข ลองพิจารณาตัวอย่างต่อไปนี้:
#รวม#รวม <แผนที่>
#รวม <อัลกอริทึม>
int หลัก ( ) {
มาตรฐาน::แผนที่ < int, std::string > แผนที่ของฉัน = {
{ 1 , 'มกราคม' } ,
{ 2 , 'กุมภาพันธ์' } ,
{ 3 , 'มีนาคม' } ,
{ 4 , 'เมษายน' } ,
{ 5 , 'อาจ' }
} ;
ภาคแสดงอัตโนมัติ = [ ] ( const std::คู่ < int, std::string >& องค์ประกอบ ) {
กลับ องค์ประกอบวินาทีความยาว ( ) < 5 ;
} ;
myMap.ลบ ( มาตรฐาน::remove_if ( myMap.begin ( ) , myMap.end ( ) , ภาคแสดง ) , myMap.end ( ) ) ;
มาตรฐาน::cout << ' \n แผนที่หลังจากลบองค์ประกอบตามภาคแสดง:' << มาตรฐาน::endl;
สำหรับ ( เชื่อมต่ออัตโนมัติ & คู่ : myMap ) {
มาตรฐาน::cout << คู่แรก << ':' << คู่.วินาที << มาตรฐาน::endl;
}
กลับ 0 ;
}
โปรแกรมเริ่มต้นด้วยการรวมไฟล์ส่วนหัวที่จำเป็น “std::map” ที่เรียกว่า “myMap” ได้รับการประกาศและเริ่มต้นในฟังก์ชัน “main” ประกอบด้วยคู่คีย์-ค่าที่แสดงถึงชื่อเดือนและค่าตัวเลขตามลำดับ ต่อมาจะมีการกำหนดฟังก์ชัน “แลมบ์ดา” (เพรดิเคต) ฟังก์ชัน “lambda” นี้ทำหน้าที่เป็นภาคแสดงสำหรับอัลกอริทึม “std::remove_if” จะตรวจสอบว่าความยาวของค่าสตริงที่เกี่ยวข้องกับองค์ประกอบแผนที่น้อยกว่าห้าอักขระหรือไม่
จากนั้นจึงใช้อัลกอริทึม “std::remove_if’ ร่วมกับฟังก์ชัน “ลบ” ของ “std::map” การรวมกันนี้จะลบองค์ประกอบต่างๆ ออกจากแผนที่ตามความถูกต้องของภาคแสดง
หลังจากรันโปรแกรม องค์ประกอบที่มีคีย์น้อยกว่า 5 คีย์จะถูกลบออกจากแผนที่ต้นฉบับ แสดงให้เห็นถึงการลบตามภาคแสดงโดยใช้ 'std::map'
บทสรุป
โดยสรุป ฟังก์ชัน “std::map::erase” เป็นเครื่องมืออเนกประสงค์ในภาษา C++ เพื่อลบองค์ประกอบออกจาก “std::map” ไม่ว่าจะลบด้วยคีย์ ตัววนซ้ำ ช่วง หรือตามเพรดิเคต ฟังก์ชัน “std::map::erase” มอบความยืดหยุ่นและความสะดวกในการใช้งาน เมื่อเชี่ยวชาญฟังก์ชันนี้แล้ว นักพัฒนา C++ จะสามารถจัดการและจัดการข้อมูลภายในคอนเทนเนอร์ “std::map” ได้อย่างมีประสิทธิภาพ ทำให้โค้ดมีความแข็งแกร่งและง่ายต่อการบำรุงรักษา