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

การ Traverse map และ unordered_map ใน C++ STL


map และ unordered_map เป็น associative containers ใน C++ STL ที่เก็บข้อมูลเป็น key-value pairs โดย key ต้องไม่ซ้ำกัน

เมธอดพื้นฐานของ map

  • begin() – iterator ชี้ไปที่ element แรก
  • end() – iterator ชี้ไปหลัง element สุดท้าย
  • size() – จำนวน elements
  • max_size() – จำนวนสูงสุดที่เก็บได้
  • empty() – เช็คว่าว่างหรือไม่

ตัวอย่าง map (เรียงลำดับ key อัตโนมัติ)

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

int main() {
    int A[] = { 2, 2, 3, 2, 2, 4, 5, 4 };
    int num = sizeof(A) / sizeof(A[0]);
    map<int, int> my_map;
    for (int p = 0; p < num; p++)
        my_map[A[p]]++;
    cout << "Item Frequency" << endl;
    for (auto p : my_map)
        cout << p.first << " : " << p.second << endl;
}

เอาต์พุท (เรียงตาม key)

Item Frequency
2 : 4
3 : 1
4 : 2
5 : 1

ตัวอย่าง unordered_map (ไม่เรียงลำดับ เร็วกว่าเฉลี่ย O(1))

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

int main() {
    int A[] = { 2, 2, 3, 2, 2, 4, 5, 4 };
    int num = sizeof(A) / sizeof(A[0]);
    unordered_map<int, int> my_map;
    for (int p = 0; p < num; p++)
        my_map[A[p]]++;
    cout << "Item Frequency" << endl;
    for (auto p : my_map)
        cout << p.first << " : " << p.second << endl;
}

เอาต์พุท (ลำดับไม่คงที่)

Item Frequency
5 : 1
4 : 2
2 : 4
3 : 1

การเลือกใช้

คุณสมบัติmapunordered_map
ลำดับเรียงตาม key (RB-tree)ไม่เรียง (hash table)
เวลา search/insert/deleteO(log n)เฉลี่ย O(1)
ใช้เมื่อต้องการ ordered iterationต้องการความเร็วสูงสุด ไม่สนลำดับ