multiset là container liên kết cho phép nhiều phần tử có cùng giá trị (khác với set chỉ cho phép duy nhất). Các phần tử được sắp xếp tự động.
Các hàm chính
- ms.size() – Tổng số phần tử (tính cả trùng lặp).
- ms.insert(val) – Chèn giá trị, trả về iterator đến phần tử mới.
- ms.erase(val) – Xóa tất cả phần tử có giá trị val.
- ms.find(val) – Trả về iterator đến phần tử đầu tiên có giá trị val.
- ms.count(val) – Số lần xuất hiện của val.
- ms.begin() / ms.end() – Duyệt.
Ví dụ mã: Menu Multiset
#include <iostream>
#include <set>
#include <string>
#include <cstdlib>
using namespace std;
int main() {
multiset<int> ms;
multiset<int>::iterator it, it1;
int c, i;
while (true) {
cout << "1. Kích thước Multiset\n";
cout << "2. Chèn phần tử\n";
cout << "3. Xóa phần tử (tất cả giá trị đó)\n";
cout << "4. Tìm phần tử\n";
cout << "5. Đếm số lần xuất hiện\n";
cout << "6. Hiển thị Multiset\n";
cout << "7. Thoát\n";
cout << "Nhập lựa chọn: ";
cin >> c;
switch (c) {
case 1:
cout << "Kích thước: " << ms.size() << endl;
break;
case 2:
cout << "Nhập giá trị: ";
cin >> i;
if (ms.empty()) it1 = ms.insert(i);
else it1 = ms.insert(it1, i); // hint iterator
break;
case 3:
cout << "Nhập giá trị xóa: ";
cin >> i;
ms.erase(i);
break;
case 4:
cout << "Nhập giá trị tìm: ";
cin >> i;
it = ms.find(i);
if (it != ms.end()) cout << "Tìm thấy\n";
else cout << "Không tìm thấy\n";
break;
case 5:
cout << "Nhập giá trị đếm: ";
cin >> i;
cout << i << " xuất hiện " << ms.count(i) << " lần.\n";
break;
case 6:
cout << "Multiset: ";
for (it = ms.begin(); it != ms.end(); ++it)
cout << *it << " ";
cout << endl;
break;
case 7:
return 0;
default:
cout << "Lựa chọn không hợp lệ\n";
}
}
return 0;
}
Kết quả mẫu
1. Kích thước Multiset 2. Chèn phần tử 3. Xóa phần tử 4. Tìm phần tử 5. Đếm số lần xuất hiện 6. Hiển thị Multiset 7. Thoát Nhập lựa chọn: 2 Nhập giá trị: 1 ... Nhập lựa chọn: 6 Multiset: 1 2 3 4 ... Nhập lựa chọn: 5 Nhập giá trị đếm: 2 2 xuất hiện 1 lần. Nhập lựa chọn: 7