Xóa các cặp
Thuộc phần Logic và luồng chương trình trong hành trình C++ của Coddy. Bài học 27 trên 56.
Đôi khi, bạn cần xóa các cặp khóa-giá trị khỏi map khi không còn cần đến chúng. Phương thức .erase() giúp bạn xóa phần tử một cách đơn giản bằng cách chỉ định khóa cần xóa.
Để xóa một phần tử khỏi map, chỉ cần gọi .erase() với khóa làm đối số:
std::map<std::string, int> scores;
scores["Alice"] = 95;
scores["Bob"] = 87;
scores["Carol"] = 92;
scores.erase("Bob"); // Xóa hoàn toàn mục của BobSau khi gọi erase("Bob"), map chỉ còn điểm số của Alice và Carol. Nếu bạn thử xóa một khóa không tồn tại trong map, thao tác này sẽ không làm gì cả, không xảy ra lỗi.
Khi duyệt qua map bằng vòng lặp for dựa trên phạm vi, mỗi phần tử là một std::pair chứa khóa và giá trị. Bạn có thể truy cập khóa bằng .first và giá trị bằng .second:
for (auto pair : scores) {
std::cout << pair.first << ": " << pair.second << std::endl;
}Câu lệnh này sẽ in ra từng tên và điểm theo thứ tự bảng chữ cái, vì std::map tự động sắp xếp các khóa.
Phương thức này đặc biệt hữu ích khi bạn cần duy trì cấu trúc dữ liệu gọn gàng, xóa thông tin lỗi thời hoặc triển khai tính năng cho phép người dùng xóa mục khỏi ứng dụng.
Thử thách
DễTạo một chương trình quản lý danh bạ bằng std::map. Chương trình lưu tên và số điện thoại của các liên hệ, sau đó cho phép người dùng xóa các liên hệ cụ thể khỏi danh bạ bằng phương thức .erase().
Chương trình sẽ nhận các đầu vào sau:
- Một số nguyên
nbiểu thị số liên hệ ban đầu - Sau đó là
ncặp đầu vào:- Một chuỗi biểu thị tên liên hệ
- Một chuỗi biểu thị số điện thoại
- Một số nguyên
mbiểu thị số liên hệ cần xóa - Sau đó là
mchuỗi biểu thị tên các liên hệ cần xóa
Chương trình cần:
- Tạo một
std::map<std::string, std::string>có tên làcontacts - Đọc số liên hệ ban đầu và thêm tên cùng số điện thoại của các liên hệ vào map
- In danh bạ ban đầu theo định dạng bên dưới
- Đọc số liên hệ cần xóa
- Với mỗi tên liên hệ cần xóa, dùng phương thức
.erase()để xóa liên hệ đó khỏi map - In danh bạ đã cập nhật sau khi xóa tất cả liên hệ
Dùng chính xác định dạng đầu ra sau:
Danh bạ ban đầu:
Initial Contact Directory:
[contact1]: [phone1]
[contact2]: [phone2]
[contact3]: [phone3]
...Danh bạ đã cập nhật sau khi xóa:
Updated Contact Directory:
[remaining_contact1]: [phone1]
[remaining_contact2]: [phone2]
...Nếu danh bạ trống sau khi xóa tất cả liên hệ, hãy in:
Updated Contact Directory:
Directory is emptyCác liên hệ cần được in theo thứ tự khi duyệt qua map, tức là theo thứ tự bảng chữ cái của tên liên hệ. Dùng vòng lặp for dựa trên phạm vi để duyệt qua map cả hai lần, truy cập từng cặp khóa-giá trị bằng pair.first để lấy tên liên hệ và pair.second để lấy số điện thoại. Hãy nhớ rằng việc thử xóa một liên hệ không tồn tại sẽ không gây lỗi, map chỉ đơn giản là không thay đổi.
Tự làm thử
#include <iostream>
#include <map>
#include <string>
using namespace std;
int main() {
// Đọc số lượng liên hệ ban đầu
int n;
cin >> n;
// Tạo map contacts
map<string, string> contacts;
// Đọc các liên hệ ban đầu
for (int i = 0; i < n; i++) {
string name, phone;
cin >> name >> phone;
// TODO: Thêm liên hệ vào map
}
// In ra danh bạ ban đầu
cout << "Initial Contact Directory:" << endl;
// TODO: In ra tất cả liên hệ bằng vòng lặp for dựa trên phạm vi
// Đọc số lượng liên hệ cần xóa
int m;
cin >> m;
// Xóa các liên hệ
for (int i = 0; i < m; i++) {
string nameToRemove;
cin >> nameToRemove;
// TODO: Xóa liên hệ bằng phương thức .erase()
}
// In ra danh bạ đã cập nhật
cout << "Updated Contact Directory:" << endl;
// TODO: In ra các liên hệ còn lại hoặc "Directory is empty" nếu danh bạ trống
return 0;
}Bài học này có một bài trắc nghiệm ngắn. Bắt đầu bài học để trả lời và theo dõi tiến độ.
Tất cả bài học trong Logic và luồng chương trình
1Con trỏ và bộ nhớ
Con trỏ là gì?Toán tử lấy địa chỉToán tử giải tham chiếuCon trỏ nullCon trỏ và mảngBộ nhớ động với newGiải phóng bộ nhớ với deleteÔn tập: luyện tập về con trỏ4Ánh xạ (cặp khóa-giá trị)
Giới thiệu std::mapTạo ánh xạTruy cập và chỉnh sửa giá trịKiểm tra khóaXóa các cặpDuyệt qua ánh xạÔn tập: tần suất từ2Vector (mảng động)
Giới thiệu std::vectorTạo vectorThêm phần tửTruy cập phần tửKích thước vectorDuyệt bằng vòng lặp forVòng lặp for dựa trên phạm viXóa phần tửÔn tập: các thao tác với vector5Dự án: Công cụ quản lý hàng tồn kho
Thiết lập dự ánThêm và cập nhật mặt hàng3Dự án: Công cụ danh sách công việc
Tổng quan dự ánThêm công việc6Tập hợp (các phần tử duy nhất)
Giới thiệu std::setTạo tập hợp và thêm phần tửKiểm tra phần tửXóa phần tửDuyệt qua tập hợpÔn tập: các số duy nhấtTự luyện tập: Trình biên dịch C++ online