std::multiset::count(key) trả về số lượng phần tử trong multiset có khóa bằng key. Vì multiset cho phép trùng lặp, hàm này rất hữu ích để đếm tần suất.
Cú pháp
size_type count(const key_type& key) const;
Đặc điểm
- Trả về số lượng phần tử khớp với
key(có thể là 0). - Độ phức tạp: O(log n + count) - tìm kiếm log n + đếm các phần tử liên tiếp.
- Không làm thay đổi multiset.
Ví dụ 1: Đếm tần suất
#include <bits/stdc++.h>
using namespace std;
int main() {
int arr[] = {1, 2, 3, 1, 1, 1};
multiset<int> ms(arr, arr + 6); // {1, 1, 1, 1, 2, 3}
cout << "Danh sách: ";
for (int x : ms) cout << x << ' ';
cout << '\n';
cout << "Số lần xuất hiện của 1: " << ms.count(1) << '\n'; // 4
cout << "Số lần xuất hiện của 2: " << ms.count(2) << '\n'; // 1
cout << "Số lần xuất hiện của 5: " << ms.count(5) << '\n'; // 0
return 0;
}
Đầu ra
Danh sách: 1 1 1 1 2 3 Số lần xuất hiện của 1: 4 Số lần xuất hiện của 2: 1 Số lần xuất hiện của 5: 0
Ví dụ 2: Đếm nhiều giá trị
#include <bits/stdc++.h>
using namespace std;
int main() {
int arr[] = {1, 2, 3, 1, 1, 1, 2, 2};
multiset<int> ms(arr, arr + 8); // {1,1,1,1,2,2,2,3}
cout << "Danh sách: ";
for (int x : ms) cout << x << ' ';
cout << '\n';
cout << "1 xuất hiện: " << ms.count(1) << " lần\n"; // 4
cout << "2 xuất hiện: " << ms.count(2) << " lần\n"; // 3
cout << "3 xuất hiện: " << ms.count(3) << " lần\n"; // 1
return 0;
}
Đầu ra
Danh sách: 1 1 1 1 2 2 2 3 1 xuất hiện: 4 lần 2 xuất hiện: 3 lần 3 xuất hiện: 1 lần
So sánh với find() và equal_range()
| Hàm | Trả về | Độ phức tạp | Dùng khi |
|---|---|---|---|
count(k) | Số lượng (size_type) | O(log n + count) | Chỉ cần biết số lượng |
find(k) | Iterator đến phần tử đầu tiên | O(log n) | Cần iterator để thao tác |
equal_range(k) | Pair | O(log n) | Cần duyệt tất cả phần tử = k |
Ví dụ dùng equal_range() để duyệt
auto range = ms.equal_range(1);
for (auto it = range.first; it != range.second; ++it) {
cout << *it << ' '; // In tất cả các 1
}
Lưu ý
- Với
set(không trùng lặp),count()chỉ trả về 0 hoặc 1. - Để đếm tần suất nhiều giá trị, cân nhắc
std::unordered_map<Key, int>(O(1) trung bình).