แผนที่ใน C++ ไลบรารีเทมเพลตมาตรฐาน (STL)

แผนที่อยู่ในอะไร C++- ไวยากรณ์

In C++, แผนที่ เป็นคอนเทนเนอร์ที่เชื่อมโยงซึ่งจัดเก็บรายการในรูปแบบที่แมป แต่ละรายการในแผนที่ประกอบด้วยคีย์-ค่าและค่าที่แมป ค่าที่แมปสองค่าไม่สามารถใช้ค่าคีย์เดียวกันร่วมกันได้

ค่าคีย์เหมาะสำหรับการเรียงลำดับและระบุองค์ประกอบที่ไม่ซ้ำกัน ค่าที่แมปใช้สำหรับจัดเก็บเนื้อหาที่เกี่ยวข้องกับคีย์ ทั้งสองประเภทอาจแตกต่างกัน แต่ประเภทสมาชิกจะรวมเข้าด้วยกันผ่านประเภทคู่ที่รวมทั้งสองอย่างเข้าด้วยกัน

เหตุใดจึงต้องใช้ std::map

ต่อไปนี้เป็นเหตุผลในการใช้แผนที่:

  • std:: map เก็บคีย์เฉพาะตามลำดับการเรียงลำดับตามเกณฑ์การเรียงลำดับที่เลือกเท่านั้น
  • การค้นหาองค์ประกอบโดยใช้ปุ่มทำได้ง่ายและรวดเร็วยิ่งขึ้น
  • แต่ละคีย์แนบองค์ประกอบเดียวเท่านั้น
  • std::map สามารถใช้เป็นอาร์เรย์ที่เชื่อมโยงได้
  • std::map สามารถใช้งานได้โดยใช้ binary tree (สมดุล)

วากยสัมพันธ์

หากต้องการประกาศ std::map ให้ใช้ไวยากรณ์นี้:

std::map<key_datatype, value_datatype>map_name; 
  • เหตุการณ์ key_datatype หมายถึงประเภทข้อมูลของคีย์แผนที่
  • เหตุการณ์ value_datatype หมายถึงประเภทข้อมูลของค่าที่สอดคล้องกับคีย์แผนที่
  • เหตุการณ์ map_name คือชื่อแผนที่

ตัวอย่างเช่น:

map<string, int> my_map; 

เราประกาศแผนที่ชื่อ my_map- แผนที่จะมีสตริงเป็น สำคัญ ประเภทข้อมูลและจำนวนเต็มเป็น ค่า ประเภทข้อมูล.

ประเภทสมาชิก

ฟังก์ชันสมาชิกสามารถใช้ประเภทสมาชิกต่อไปนี้เป็นพารามิเตอร์หรือประเภทส่งคืนได้:

  • คีย์_ประเภท: คีย์ (พารามิเตอร์แรกในเทมเพลต)
  • แมป_ประเภท: T (พารามิเตอร์ตัวที่สองในเทมเพลต)
  • คีย์_เปรียบเทียบ: เปรียบเทียบ (พารามิเตอร์ที่สามในเทมเพลต)
  • ตัวจัดสรร_ประเภท: Alloc (พารามิเตอร์ที่สี่ในเทมเพลต)
  • ค่า_ประเภท: คู่
  • มูลค่า_เปรียบเทียบ: คลาสฟังก์ชันที่ซ้อนกันสำหรับการเปรียบเทียบองค์ประกอบ
  • อ้างอิง: allocator_type::การอ้างอิง
  • const_reference: allocator_type::const_reference
  • ตัวชี้: allocator_type::ตัวชี้
  • const_pointer: allocator_type::const_pointer
  • ตัววนซ้ำ: ตัววนซ้ำแบบสองทิศทางไปยัง value_type
  • const_iterator: ตัววนซ้ำแบบสองทิศทางไปยัง const value_type
  • ย้อนกลับ_ตัววนซ้ำ: ตัววนซ้ำแบบย้อนกลับ
  • const_reverse_iterator: ตัววนซ้ำแบบย้อนกลับคงที่
  • ความแตกต่าง_ประเภท: ptrdiff_t
  • ขนาด_ประเภท: ขนาด_t

ฟังก์ชั่นในตัวของ std::map

std::map มาพร้อมกับฟังก์ชั่น inbuilt บางส่วนได้แก่:

  • เริ่ม() - ฟังก์ชันนี้จะคืนค่าตัววนซ้ำไปยังรายการแรกของแผนที่
  • ขนาด() -ฟังก์ชันนี้ส่งคืนจำนวนรายการในแผนที่
  • ว่างเปล่า() -ฟังก์ชันนี้ส่งคืนค่าบูลีนเพื่อแสดงว่าแผนที่ว่างเปล่าหรือไม่
  • แทรก (คู่ (คีย์, ค่า)) – ฟังก์ชันนี้จะแทรกคู่คีย์-ค่าใหม่ลงในแผนที่
  • ค้นหา(วาล) – ฟังก์ชันนี้จะมอบตัววนซ้ำให้กับองค์ประกอบ val หากพบ มิฉะนั้น ฟังก์ชันจะส่งคืน m.end()
  • ลบ (ตำแหน่งตัววนซ้ำ) – ฟังก์ชันนี้จะลบรายการที่ตำแหน่งที่ตัววนซ้ำชี้
  • ลบ(const g) – ฟังก์ชั่นนี้จะลบคีย์-ค่า g ออกจากแผนที่
  • ชัดเจน () -ฟังก์ชั่นนี้จะลบรายการทั้งหมดออกจากแผนที่

การวนซ้ำองค์ประกอบแผนที่

คุณสามารถวนซ้ำองค์ประกอบแผนที่ได้ เราเพียงแค่ต้องสร้างตัววนซ้ำและใช้สำหรับสิ่งนี้
ตัวอย่างเช่น:

1 ตัวอย่าง:

#include <iostream>
#include <string>
#include <map> 

using namespace std;
int main() {

	map<int, string> Students;

	Students.insert(std::pair<int, string>(200, "Alice"));

	Students.insert(std::pair<int, string>(201, "John"));

	cout << "Map size is: " << Students.size() << endl;

	cout << endl << "Default map Order is: " << endl;

	for (map<int, string>::iterator it = Students.begin(); it != Students.end(); ++it) {

		cout << (*it).first << ": " << (*it).second << endl;
	}
}

Output:

การวนซ้ำองค์ประกอบแผนที่

นี่คือภาพหน้าจอของรหัส:

การวนซ้ำองค์ประกอบแผนที่

คำอธิบายรหัส:

  1. รวมไฟล์ส่วนหัว iostream ลงในโค้ดของเราเพื่อใช้ฟังก์ชันต่างๆ
  2. รวมไฟล์ส่วนหัวของสตริงลงในโค้ดของเราเพื่อใช้ฟังก์ชันต่างๆ
  3. รวมไฟล์ส่วนหัวของแผนที่ลงในโค้ดของเราเพื่อใช้ฟังก์ชันต่างๆ
  4. รวมเนมสเปซมาตรฐานไว้ในโค้ดของเราเพื่อใช้คลาสโดยไม่ต้องเรียกมัน
  5. โทร main() การทำงาน. { เป็นจุดเริ่มต้นของเนื้อความของฟังก์ชัน
  6. สร้างแผนที่ชื่อ Students โดยที่คีย์จะเป็นจำนวนเต็ม และค่าจะเป็นสตริง
  7. แทรกค่าลงในแผนที่นักเรียน คีย์ 200 และค่าของ Alice จะถูกแทรกลงในแผนที่
  8. แทรกค่าลงในแผนที่นักเรียน คีย์ 201 และค่าของ John จะถูกแทรกลงในแผนที่
  9. ใช้ size() ฟังก์ชั่นรับขนาดของแผนที่ชื่อนักเรียน นี่ควรคืนค่า 2
  10. พิมพ์ข้อความบนคอนโซล
  11. ใช้ for loop เพื่อสร้างตัววนซ้ำโดยตั้งชื่อเพื่อวนซ้ำองค์ประกอบของแผนที่ชื่อ Students
  12. พิมพ์ค่าของแผนที่นักเรียนบนคอนโซล
  13. ส่วนท้ายของ for loop
  14. ส่วนปลายของลำตัว main() ฟังก์ชัน

การแทรกข้อมูลใน std::map

คุณสามารถป้อนรายการลงใน std::map โดยใช้ไฟล์ insert() การทำงาน. โปรดจำไว้ว่าคีย์ std::map จะต้องไม่ซ้ำกัน

ดังนั้นจึงตรวจสอบก่อนว่าแต่ละคีย์มีอยู่ในแผนที่หรือไม่ หากมีอยู่ รายการจะไม่ถูกแทรก แต่จะส่งคืนตัววนซ้ำสำหรับรายการที่มีอยู่ หากไม่มีอยู่ รายการจะถูกแทรก

ฟังก์ชั่นมีรูปแบบต่างๆ ดังต่อไปนี้:

  • ใส่(คู่) – ด้วยรูปแบบนี้ คู่คีย์-ค่าจะถูกแทรกลงในแผนที่
  • แทรก (start_itr, end_itr) – ด้วยรูปแบบนี้ รายการจะถูกแทรกภายในช่วงที่กำหนดโดย start_itr และ end_itr จากแผนที่อื่น

เหตุการณ์ insert_or_assing() ฟังก์ชั่นทำงานในลักษณะเดียวกับ insert() ฟังก์ชั่น แต่ถ้าคีย์ที่กำหนดมีอยู่แล้วในแผนที่ ค่าของคีย์นั้นจะถูกแก้ไข

2 ตัวอย่าง:

#include <map>
#include <iostream>

using namespace std;

int main() {

	map<int, int> m{ {1,3} , {2,4} , {3,5} };

	m.insert({ 5, 6 });
	m.insert({ 1, 8 });

	m.insert_or_assign(1, 6);  
	
	cout << "Key\tElement\n";
	for (auto itr = m.begin(); itr != m.end(); ++itr) {
		cout << itr->first << '\t' << itr->second << '\n';
	}
	return 0;
}

Output:

การแทรกข้อมูลใน std::map

นี่คือภาพหน้าจอของรหัส:

การแทรกข้อมูลใน std::map

คำอธิบายรหัส:

  1. รวมไฟล์ส่วนหัวของแผนที่ลงในโค้ดของเราเพื่อใช้ฟังก์ชันต่างๆ
  2. รวมไฟล์ส่วนหัว iostream ลงในโค้ดของเราเพื่อใช้ฟังก์ชันต่างๆ
  3. รวมเนมสเปซมาตรฐานไว้ในโค้ดของเราเพื่อใช้คลาสโดยไม่ต้องเรียกมัน
  4. โทร main() การทำงาน. { เป็นจุดเริ่มต้นของเนื้อความของฟังก์ชัน
  5. สร้างแผนที่ชื่อ m โดยที่คีย์จะเป็นจำนวนเต็ม และค่าจะเป็นจำนวนเต็ม มีการสร้างรายการสามรายการลงในแผนที่
  6. แทรกรายการใหม่ลงในแผนที่ m คีย์ 5 และค่า 6 จะถูกแทรกลงในแผนที่
  7. กำลังพยายามสร้างรายการลงในคีย์ที่มีอยู่แล้ว เนื่องจากคีย์ 1 มีอยู่แล้วในแผนที่ จึงไม่สามารถป้อนข้อมูลได้
  8. การใช้ insert_or_assign() ฟังก์ชันเพื่อแทรกหรือแก้ไขรายการที่มีอยู่ เนื่องจากมีคีย์ 1 อยู่แล้ว ค่าจึงจะเปลี่ยนเป็น 6
  9. พิมพ์ข้อความบนคอนโซล อักขระ “\t” สร้างช่องว่างแนวนอนในขณะที่อักขระ “\n” เลื่อนเคอร์เซอร์ของเมาส์ไปยังบรรทัดถัดไป
  10. ใช้ สำหรับห่วง เพื่อสร้างตัววนซ้ำชื่อ itr เพื่อวนซ้ำองค์ประกอบของแผนที่ชื่อ m
  11. พิมพ์ค่าของแผนที่ m บนคอนโซล อักขระ “\t” สร้างช่องว่างแนวนอนระหว่างแต่ละคีย์และค่าที่สอดคล้องกัน ในทางตรงกันข้าม อักขระ “\n” จะเลื่อนเคอร์เซอร์ของเมาส์ไปยังบรรทัดถัดไปหลังจากการวนซ้ำทุกครั้ง
  12. ส่วนท้ายของตัว for a loop
  13. โปรแกรมจะต้องคืนค่าเมื่อเสร็จสิ้นสำเร็จ
  14. ส่วนปลายของลำตัว main() ฟังก์ชัน

การค้นหาในแผนที่

เราสามารถใช้ไฟล์ find() ฟังก์ชันสำหรับค้นหาองค์ประกอบในแผนที่โดยใช้คีย์ หากไม่พบคีย์ ฟังก์ชันจะส่งคืน std::map::end มิฉะนั้น ระบบจะส่งคืนตัววนซ้ำขององค์ประกอบที่ค้นหา

3 ตัวอย่าง:

#include <iostream>
#include <string>
#include <map> 
using namespace std;
int main() {
	map<int, string> Students;
	Students.insert(std::pair<int, string>(200, "Alice"));
	Students.insert(std::pair<int, string>(201, "John"));
	std::map<int, string>::iterator it = Students.find(201);
	if (it != Students.end()) {
		std::cout << endl << "Key 201 has the value: => "<< Students.find(201)->second << '\n';
	}
}

Output:

การค้นหาในแผนที่

นี่คือภาพหน้าจอของรหัส:

การค้นหาในแผนที่

คำอธิบายรหัส:

  1. รวมไฟล์ส่วนหัว iostream ลงในโค้ดของเราเพื่อใช้ฟังก์ชันต่างๆ โดยไม่ได้รับข้อผิดพลาด
  2. รวมไฟล์ส่วนหัวของสตริงลงในโค้ดของเราเพื่อใช้ฟังก์ชันต่างๆ โดยไม่ได้รับข้อผิดพลาด
  3. รวมไฟล์ส่วนหัวของแผนที่ลงในโค้ดของเราเพื่อใช้ฟังก์ชันต่างๆ โดยไม่ได้รับข้อผิดพลาด
  4. รวมเนมสเปซมาตรฐานไว้ในโค้ดของเราเพื่อใช้คลาสโดยไม่ต้องเรียกมัน
  5. โทร main() การทำงาน. { เป็นจุดเริ่มต้นของเนื้อความของ main() ฟังก์ชัน
  6. สร้างแผนที่ชื่อ Students ซึ่งคีย์จะเป็นจำนวนเต็มและสตริงค่า
  7. แทรกค่าลงในแผนที่นักเรียน คีย์ 200 และค่าของ Alice จะถูกแทรกลงในแผนที่
  8. แทรกค่าลงในแผนที่นักเรียน คีย์ 201 และค่าของ John จะถูกแทรกลงในแผนที่
  9. ค้นหาค่าที่เกี่ยวข้องกับคีย์ 201
  10. ใช้คำสั่ง if เพื่อตรวจสอบว่าพบค่าของคีย์หรือไม่
  11. พิมพ์ค่าของคีย์ควบคู่ไปกับข้อความบนคอนโซล
  12. ส่วนท้ายของคำสั่ง if
  13. ส่วนปลายของลำตัว main() ฟังก์ชัน

การลบข้อมูลจากแผนที่

เราสามารถใช้ไฟล์ erase() ฟังก์ชั่นลบค่าออกจากแผนที่ เราเพียงแค่สร้างตัววนซ้ำที่ชี้ไปยังองค์ประกอบที่จะลบ จากนั้นตัววนซ้ำจะถูกส่งไปยัง erase() ฟังก์ชัน

4 ตัวอย่าง:

#include <iostream>
#include <string>
#include <map>

using namespace std;
int main() {

	map<std::string, int> my_map;

	my_map.insert(std::make_pair("cow", 1));

	my_map.insert(std::make_pair("cat", 2));

	my_map["lion"] = 3;

	map<std::string, int>::iterator it = my_map.find("cat");

	my_map.erase(it);

	for (map<string, int>::iterator it = my_map.begin(); it != my_map.end(); ++it)

		cout << (*it).first << ": " << (*it).second << endl;

  return 0;
}

Output:

การลบข้อมูลจากแผนที่

นี่คือภาพหน้าจอของรหัส:

การลบข้อมูลจากแผนที่

คำอธิบายรหัส:

  1. รวมไฟล์ส่วนหัว iostream ลงในโค้ดของเราเพื่อใช้ฟังก์ชันต่างๆ
  2. รวมไฟล์ส่วนหัวของสตริงลงในโค้ดของเราเพื่อใช้ฟังก์ชันต่างๆ
  3. รวมไฟล์ส่วนหัวของแผนที่ลงในโค้ดของเราเพื่อใช้ฟังก์ชันต่างๆ
  4. รวมเนมสเปซมาตรฐานไว้ในโค้ดของเราเพื่อใช้คลาสโดยไม่ต้องเรียกมัน
  5. โทร main() การทำงาน. { เป็นจุดเริ่มต้นของส่วนเนื้อหาของ main() ฟังก์ชัน
  6. สร้างแผนที่ชื่อ my_map ซึ่งคีย์จะเป็นสตริงและค่าจำนวนเต็ม
  7. ใส่ค่าลงในแผนที่ my_map คีย์ Cow และค่า 1 จะถูกแทรกลงในแผนที่
  8. ใส่ค่าลงในแผนที่ my_map คีย์ Cat และค่า 2 จะถูกแทรกลงในแผนที่
  9. เพิ่มค่า 3 ลงในแผนที่ my_map ด้วยกุญแจรูปสิงโต
  10. สร้างตัววนซ้ำเพื่อวนซ้ำบนแผนที่ my_map เพื่อค้นหาคีย์ cat
  11. ลบองค์ประกอบที่ตัววนซ้ำชี้ไป
  12. ใช้ตัววนซ้ำเพื่อวนซ้ำองค์ประกอบของแผนที่ my_map ตั้งแต่ต้นจนจบ
  13. พิมพ์เนื้อหาของแผนที่ my_map บนคอนโซล
  14. โปรแกรมจะต้องส่งคืนเอาต์พุตเมื่อเสร็จสิ้นสำเร็จ
  15. ส่วนปลายของลำตัว main() ฟังก์ชัน

สรุป

  • แผนที่เป็นคอนเทนเนอร์ที่เชื่อมโยงซึ่งจัดเก็บรายการต่างๆ ในรูปแบบที่แมป
  • แต่ละรายการในแผนที่มีค่าคีย์และค่าที่แมป
  • ในแผนที่ ค่าที่แมปสองค่าไม่สามารถใช้ค่าคีย์ร่วมกันได้
  • ค่าคีย์ช่วยในการเรียงลำดับและระบุองค์ประกอบที่ไม่ซ้ำกัน
  • ค่าที่แมปช่วยในการจัดเก็บเนื้อหาที่เกี่ยวข้องกับคีย์
  • C++ แผนที่จัดเก็บคีย์ที่ไม่ซ้ำตามลำดับการจัดเรียง
  • ในการทำงานกับ C++ map เราสร้างตัววนซ้ำเพื่อวนซ้ำองค์ประกอบต่างๆ
  • ด้วยตัววนซ้ำเราสามารถดำเนินการงานต่างๆ เช่น การค้นหาและลบรายการออกจากแผนที่ได้