Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

ฟังก์ชัน multimap::cbegin() และ multimap::cend() ใน C++ STL

Multimap ใน C++ STL คืออะไร?

Multimap เป็น associative container ที่คล้ายกับ map แต่อนุญาตให้มีหลายค่าผูกกับคีย์เดียวกันได้ ข้อมูลจัดเรียงอัตโนมัติตามคีย์

ฟังก์ชัน multimap::cbegin() คืออะไร?

ฟังก์ชัน multimap::cbegin() ประกาศอยู่ใน header <map> คืนค่า constant iterator (const_iterator) ชี้ไปยังองค์ประกอบแรกของ multimap container Iterator ที่คืนมาเป็น constant ไม่สามารถใช้แก้ไขข้อมูลได้ ใช้ได้แค่การ遍历 (traverse) เท่านั้น

รูปแบบไวยากรณ์ (Syntax)

multi.cbegin();

พารามิเตอร์

ไม่รับพารามิเตอร์

ค่าที่ส่งคืน

คืนค่า const_iterator ชี้ไปยังองค์ประกอบแรกของ container

ฟังก์ชัน multimap::cend() คืออะไร?

ฟังก์ชัน multimap::cend() ประกาศอยู่ใน header <map> คืนค่า constant iterator ชี้ไปยังตำแหน่ง หลังองค์ประกอบสุดท้าย (past-the-end) ของ multimap container ใช้เป็นจุดสิ้นสุดในการ遍历

รูปแบบไวยากรณ์ (Syntax)

multi.cend();

พารามิเตอร์

ไม่รับพารามิเตอร์

ค่าที่ส่งคืน

คืนค่า const_iterator ชี้ไปยังตำแหน่ง past-the-end

ตัวอย่างการใช้งาน

#include <bits/stdc++.h>
using namespace std;

int main() {
    // สร้าง container
    multimap<int, int> mul;
    
    // แทรกข้อมูลด้วย emplace_hint
    mul.emplace_hint(mul.begin(), 1, 10);
    mul.emplace_hint(mul.begin(), 2, 20);
    mul.emplace_hint(mul.begin(), 2, 30);
    mul.emplace_hint(mul.begin(), 1, 40);
    mul.emplace_hint(mul.begin(), 1, 50);
    mul.emplace_hint(mul.begin(), 5, 60);
    
    auto it = mul.cbegin();
    cout << "First element in the multimap is: ";
    cout << "{" << it->first << ", " << it->second << "}\n";
    
    cout << "\nElements in multimap is: \n";
    cout << "KEY\tELEMENT\n";
    for (auto i = mul.cbegin(); i != mul.cend(); i++) {
        cout << i->first << "\t" << i->second << endl;
    }
    
    return 0;
}

ผลลัพธ์

First element in the multimap is: {1, 50}
Elements in multimap is:
KEY	ELEMENT
1	50
1	40
1	10
2	30
2	20
5	60

ข้อดีของการใช้ cbegin()/cend()

  • Const-correctness - ป้องกันการแก้ไขข้อมูลโดยไม่ได้ตั้งใจขณะ遍历
  • API clarity - แสดงเจตนาการอ่านอย่างเดียว ช่วยให้โค้ดอ่านง่ายขึ้น
  • Optimization - Compiler อาจ optimize ได้ดีกว่าเมื่อรู้ว่า iterator เป็น const

สรุป

cbegin() และ cend() เป็น constant version ของ begin() และ end() ใช้สำหรับ read-only traversal ของ multimap เป็น best practice เมื่อไม่ต้องการแก้ไขข้อมูลขณะวนลูป