std::multiset::empty() kiểm tra xem multiset có rỗng hay không. Trả về true nếu không có phần tử nào, false nếu có ít nhất một phần tử.
Cú pháp
bool empty() const noexcept;
Đặc điểm multiset
- Container liên kết, giữ phần tử theo thứ tự đã sắp xếp (mặc định tăng dần).
- Cho phép phần tử trùng lặp (khác với
set). - Triển khai thường là cây đỏ-đen (Red-Black Tree).
- Header:
<set>.
Ví dụ 1: Multiset không rỗng
#include <bits/stdc++.h>
using namespace std;
int main() {
int arr[] = {2, 3, 4, 5};
multiset<int> ms(arr, arr + 4); // {2, 3, 4, 5}
if (ms.empty())
cout << "Multiset rỗng\n";
else
cout << "Multiset KHÔNG rỗng, size = " << ms.size() << '\n';
return 0;
}
Multiset KHÔNG rỗng, size = 4
Ví dụ 2: Multiset rỗng
#include <bits/stdc++.h>
using namespace std;
int main() {
multiset<int> ms; // Rỗng
if (ms.empty())
cout << "Multiset rỗng\n";
else
cout << "Multiset KHÔNG rỗng\n";
return 0;
}
Multiset rỗng
Ví dụ 3: Kiểm tra trước khi truy cập
#include <bits/stdc++.h>
using namespace std;
void safe_print_first(const multiset<int>& ms) {
if (ms.empty()) {
cout << "Multiset rỗng, không có phần tử đầu.\n";
} else {
cout << "Phần tử nhỏ nhất: " << *ms.begin() << '\n';
}
}
int main() {
multiset<int> ms1 = {5, 2, 8};
multiset<int> ms2;
safe_print_first(ms1); // Phần tử nhỏ nhất: 2
safe_print_first(ms2); // Multiset rỗng...
return 0;
}
Độ phức tạp
- Thời gian: O(1).
- Không ném exception (
noexcept).
So sánh với size() == 0
Cả hai tương đương về mặt logic, nhưng empty():
- Rõ ý nghĩa hơn (semantic clarity).
- Có thể tối ưu hơn cho một số container (ví dụ: list::size() có thể O(1) hoặc O(n) tùy implementation, nhưng empty() luôn O(1)).
- Là idiom chuẩn C++.
Các hàm liên quan
size(): Trả về số phần tử.max_size(): Số phần tử tối đa có thể chứa.clear(): Xóa tất cả phần tử (làm empty() trả về true).