C ++ Std::Map::Erase ตัวอย่าง

C Std Map Erase Tawxyang



ในบรรดาการดำเนินการมากมายสำหรับ '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++ ที่จำเป็น เช่น และ เพื่อเปิดใช้งานการใช้งานอินพุต/เอาต์พุตและคอนเทนเนอร์ “std::map” ตามลำดับ ภายในฟังก์ชัน 'main' เราจะเริ่มต้น 'std::map' ชื่อ 'myMap' โดยที่คีย์จำนวนเต็มเชื่อมโยงกับค่าสตริงที่สอดคล้องกัน คู่คีย์-ค่าสามคู่จะถูกเพิ่มลงในแผนที่ซึ่งแสดงถึงสี: 'สีแดง' สำหรับคีย์ 1, 'สีน้ำเงิน' สำหรับคีย์ 2 และ 'สีเขียว' สำหรับคีย์ 3 จากนั้น เราใช้ฟังก์ชันสมาชิก 'ลบ' ของฟังก์ชัน ' std::map” เพื่อลบองค์ประกอบที่เกี่ยวข้องกับคีย์ 2 ออกจากแผนที่ของเรา ด้วยเหตุนี้ สี 'สีน้ำเงิน' จึงไม่ได้เป็นส่วนหนึ่งของแผนที่อีกต่อไปหลังการดำเนินการนี้



เพื่อแสดงสถานะผลลัพธ์ของแผนที่ เราใช้ลูป '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” ได้อย่างมีประสิทธิภาพ ทำให้โค้ดมีความแข็งแกร่งและง่ายต่อการบำรุงรักษา