สมมติว่าเรามีโครงสร้างข้อมูลแผนที่สำหรับให้นักเรียนหมุนและตั้งชื่อม้วนเป็นข้อมูลจำนวนเต็มและชื่อเป็นข้อมูลประเภทสตริง ในการป้อนข้อมูลมาตรฐานของเรา เรามี n แบบสอบถาม ในแต่ละแบบสอบถาม (ในแต่ละบรรทัด) จะต้องมีสององค์ประกอบและสำหรับการค้นหาประเภท 1 จะมีสามองค์ประกอบ อันแรกคือตัวดำเนินการ อันที่สองคือม้วน และอันที่สามคือชื่อ สำหรับสององค์ประกอบที่สอบถาม รายการที่สองคือหมายเลขม้วน การดำเนินการเป็นเหมือนด้านล่าง−
-
แทรก. ซึ่งจะแทรกชื่อลงในแผนที่ที่ม้วนที่เกี่ยวข้อง
-
ลบ. การดำเนินการนี้จะลบเลขที่ม้วนออกจากแผนที่ (ถ้ามี)
-
ค้นหา. การดำเนินการนี้จะค้นหาชื่อในแผนที่ด้วยหมายเลขม้วน หากมี จะแสดงชื่อ มิฉะนั้น จะแสดง ไม่พบ
ดังนั้น หากอินพุตเป็น n =8 คำสั่ง =[[1,5,"Atanu"], [1,8, "Tapan"], [1,3,"Manish"],[2,8], [1,9, "ปิยะลี"], [3,8], [3,3], [3,5]] แล้วผลลัพธ์จะเป็น [ไม่พบ, มานิช, อาตานุ] เพราะการทอย 8 ไม่มีอยู่, ชื่อนักเรียนม้วนที่ 3 คือ Manish และชื่อนักเรียนที่ม้วนที่ 5 คือ "Atanu"
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
- n :=จำนวนคำค้นหา
- กำหนดหนึ่งแมป m ของคีย์ประเภทจำนวนเต็มและค่าประเภทสตริง
- ในขณะที่ n ไม่ใช่ศูนย์ ให้ลด n ในการวนซ้ำแต่ละครั้ง ทำ:
- ใช้ประเภทข้อความค้นหาปัจจุบัน t
- เอาเลขม้วน
- ถ้า t เหมือนกับ 1 แล้ว:
- ตั้งชื่อ
- ม[ม้วน] :=ชื่อ
- มิฉะนั้นเมื่อ t เหมือนกับ 2 แล้ว:
- m[roll] :=สตริงว่าง
- อย่างอื่น
- ถ้า m[roll] ไม่ใช่สตริงว่าง ดังนั้น:
- แสดง m[ม้วน]
- มิฉะนั้น
- แสดง "ไม่พบ"
- ถ้า m[roll] ไม่ใช่สตริงว่าง ดังนั้น:
ตัวอย่าง
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
#include <iostream> #include <map> using namespace std; int main(){ int n; cin >> n; map<int, string> m; while (n--) { int t; cin >> t; int roll; cin >> roll; if (t == 1) { string name; cin >> name; m[roll] = name; } else if (t == 2) { m[roll] = ""; } else { if(m[roll] != "") cout << m[roll] << endl; else cout << "Not found" << endl; } } }
อินพุต
8 1 5 Atanu 1 8 Tapan 1 3 Manish 2 8 1 9 Piyali 3 8 3 3 3 5
ผลลัพธ์
Not found Manish Atanu