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

Difference between Set and Multiset in C++


Cả set và multiset đều là container liên kết sắp xếp, nhưng khác nhau ở việc cho phép trùng lặp.

Tiêu chísetmultiset
Định nghĩa Lưu key duy nhất, tự động sắp xếp. Lưu key có thể trùng lặp, tự động sắp xếp.
Sắp xếp Tăng dần. Tăng dần.
Trùng lặp Không cho phép. Cho phép (lưu multiplicity).
Cài đặt Red-Black Tree. Red-Black Tree.
Thao tác insert/find/erase: O(log n). insert/find/erase: O(log n). count(x) trả về số lần xuất hiện.
Sửa giá trị Không thể sửa trực tiếp (phải xóa rồi insert mới). Tương tự.

Ví dụ Set

#include <bits/stdc++.h>
using namespace std;
int main() {
    int data[15] = {11,55,22,66,33,22,11,44,77,88,66,99,66,23,41};
    set<int> my_set;
    for (int x : data) my_set.insert(x);
    for (int x : my_set) cout << "Item: " << x << endl;
    // Output: 11, 22, 23, 33, 41, 44, 55, 66, 77, 88, 99
    return 0;
}

Ví dụ Multiset

#include <bits/stdc++.h>
using namespace std;
int main() {
    int data[15] = {11,55,22,66,33,22,11,44,77,88,66,99,66,23,41};
    multiset<int> my_set;
    for (int x : data) my_set.insert(x);
    for (int x : my_set) cout << "Item: " << x << endl;
    // Output: 11, 11, 22, 22, 23, 33, 41, 44, 55, 66, 66, 66, 77, 88, 99
    return 0;
}

Khi nào dùng Multiset?

  • Cần lưu tần suất xuất hiện của các phần tử.
  • Cần lấy tất cả phần tử bằng một giá trị (equal_range).
  • Cần thao tác upper_bound/lower_bound trên dữ liệu có trùng lặp.