std::multimap::erase
#include <map>
// Phiên bản 1: Xóa phần tử tại vị trí được chỉ định
iterator erase(const_iterator pos);
// Phiên bản 2: Xóa các phần tử trong một phạm vi
iterator erase(const_iterator first, const_iterator last);
// Phiên bản 3: Xóa phần tử có key cụ thể
size_type erase(const key_type& key);
Xóa một hoặc nhiều phần tử khỏi std::multimap.
Tham số
pos
- Iterator trỏ đến phần tử cần xóa (phiên bản 1).
pos
phải là một iterator hợp lệ và có thể dereference được trong std::multimap.
first, last
- Iterator xác định phạm vi các phần tử cần xóa (phiên bản 2).
first
trỏ đến phần tử đầu tiên cần xóa,last
trỏ đến phần tử sau phần tử cuối cùng cần xóa (past-the-end).
key
- Giá trị của
key
cần xóa (phiên bản 3).
Giá trị trả về
- Phiên bản 1 và 2:
iterator
: Trả về một iterator trỏ đến phần tử theo sau phần tử cuối cùng bị xóa. Nếu không có phần tử nào như vậy (ví dụ: xóa phần tử cuối cùng của std::multimap), hàm trả vềend()
.
- Phiên bản 3:
size_type
: Trả về số lượng phần tử đã bị xóa.
Đặc điểm
- Xóa phần tử tại vị trí cụ thể hoặc theo giá trị hoặc theo phạm vi:
erase()
cho phép bạn xóa một phần tử duy nhất bằng iterator, xóa một dãy các phần tử liên tiếp bằng iterator, hoặc xóa tất cả các phần tử cókey
khớp với giá trị cho trước. - Giảm kích thước:
erase()
làm giảm kích thước của std::multimap tương ứng với số lượng phần tử bị xóa. - Hành vi không xác định khi iterator không hợp lệ: Gọi
erase()
với iterator không hợp lệ (ví dụ:pos
trỏ đếnend()
, hoặcfirst
,last
không hợp lệ) sẽ dẫn đến hành vi không xác định. - Có thể làm thay đổi iterator: Việc xóa phần tử khỏi std::multimap có thể làm thay đổi (invalidate) các iterator đang trỏ đến các phần tử trong std::multimap. Iterator trả về bởi hàm
erase()
là hợp lệ và trỏ đến phần tử tiếp theo sau phần tử cuối cùng bị xóa. - Không trả về giá trị phần tử bị xóa:
erase()
không trả về giá trị (value) của phần tử bị xóa. - An toàn exception: Nếu exception xảy ra trong khi
erase()
đang chạy, ví dụ từ destructor củavalue_type
, thì các thay đổi đã thực hiện (các phần tử đã xóa) vẫn có hiệu lực. - Độ phức tạp:
- Xóa một phần tử bằng iterator (phiên bản 1):
O(log n)
(amortized constant time -O(1)
cho phần tử cuối cùng). - Xóa phần tử theo
key
(phiên bản 3):O(log n + m)
, với n là số phần tử trong std::multimap và m là số lượng phần tử bị xóa. - Xóa nhiều phần tử (phiên bản 2):
O(k + log n)
, với k là số phần tử bị xóa và n là số phần tử trong std::mamultimapp
- Xóa một phần tử bằng iterator (phiên bản 1):
Ví dụ
#include <iostream>
#include <map>
int main() {
std::multimap<std::string, int> mymultimap = {
{"apple", 1},
{"banana", 2},
{"orange", 3},
{"apple", 4},
{"grape", 5}
};
// Phiên bản 1: Xóa phần tử "banana"
auto it = mymultimap.find("banana");
if (it != mymultimap.end()) {
mymultimap.erase(it); // Xóa phần tử được trỏ bởi it
std::cout << "Removed element with key 'banana'\n";
}
// Phiên bản 2: Xóa hai phần tử đầu tiên
mymultimap.erase(mymultimap.begin(), ++++mymultimap.begin());
std::cout << "mymultimap after erasing first two elements:\n";
for (const auto& pair : mymultimap) {
std::cout << pair.first << ": " << pair.second << '\n';
}
// Output:
// mymultimap after erasing first two elements:
// grape: 5
// orange: 3
// Phiên bản 3: Xóa tất cả phần tử có key "apple"
size_type num_removed = mymultimap.erase("apple");
std::cout << "Number of elements with key 'apple' removed: " << num_removed << '\n'; // Output: Number of elements with key 'apple' removed: 2
// In ra các phần tử còn lại trong multimap
std::cout << "mymultimap after erasing elements with key 'apple':\n";
for (const auto& pair : mymultimap) {
std::cout << pair.first << ": " << pair.second << '\n';
}
// Output:
// mymultimap after erasing elements with key 'apple':
// grape: 5
// orange: 3
return 0;
}
Các hàm liên quan
clear | Xóa tất cả các phần tử khỏi std::multimap |
insert | Chèn một phần tử mới (cặp key-value ) vào std::multimap |
find | Tìm kiếm một phần tử có key bằng với giá trị key cho trước trong std::multimap |