Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C++

Chương trình C++ triển khai Multimap trong STL

multimap tương tự map nhưng cho phép nhiều phần tử có cùng khóa. Mỗi cặp (key, value) vẫn phải duy nhất (không trùng lặp hoàn toàn cả key và value).

Các hàm chính

  • mm.find(key) – Trả về iterator đến phần tử đầu tiên có khóa key.
  • mm.erase(it) – Xóa phần tử tại iterator (chỉ xóa một).
  • mm.equal_range(key) – Trả về cặp iterator (first, second) bao gồm tất cả phần tử có khóa key.
  • mm.insert(pair) – Chèn cặp key-value.
  • mm.size() – Tổng số phần tử.
  • mm.count(key) – Số phần tử có khóa key.

Ví dụ mã

#include <iostream>
#include <map>
#include <string>
using namespace std;

int main() {
    multimap<char, int> mm;
    multimap<char, int>::iterator it;

    mm.insert(pair<char, int>('a', 10));
    mm.insert(pair<char, int>('b', 20));
    mm.insert(pair<char, int>('b', 30));
    mm.insert(pair<char, int>('a', 40));

    cout << "Kích thước: " << mm.size() << endl;
    cout << "Multimap:\n";
    for (it = mm.begin(); it != mm.end(); ++it)
        cout << (*it).first << " => " << (*it).second << '\n';

    for (char c = 'a'; c <= 'b'; ++c) {
        cout << "Số phần tử khóa '" << c << "': " << mm.count(c) << ": ";
        for (it = mm.equal_range(c).first; it != mm.equal_range(c).second; ++it)
            cout << ' ' << (*it).second;
        cout << endl;
    }

    it = mm.find('b');
    mm.erase(it); // xóa 1 phần tử khóa 'b'

    cout << "Sau xóa 1 'b':\n";
    cout << "Kích thước: " << mm.size() << endl;
    for (it = mm.begin(); it != mm.end(); ++it)
        cout << (*it).first << " => " << (*it).second << '\n';

    return 0;
}

Kết quả

Kích thước: 4
Multimap:
a => 10
a => 40
b => 20
b => 30
Số phần tử khóa 'a': 2: 10 40
Số phần tử khóa 'b': 2: 20 30
Sau xóa 1 'b':
Kích thước: 3
Multimap:
a => 10
a => 40
b => 30