Unordered_map trong C++ là gì?
Unordered_map là một cấu trúc dữ liệu của Thư viện C++ chuẩn (STL) dùng để lưu trữ các cặp giá trị (key-value). Unordered_map sử dụng cấu trúc dữ liệu hash table để lưu trữ các phần tử, do đó thời gian truy cập các phần tử là O(1).
Unordered_map có các đặc điểm sau:
- Các phần tử trong unordered_map không được sắp xếp theo thứ tự.
- Key của các phần tử trong unordered_map phải có thể chuyển đổi thành số nguyên hoặc chuỗi.
- Giá trị của các phần tử trong unordered_map có thể là bất kỳ kiểu dữ liệu nào.
Dưới đây là một ví dụ về cách sử dụng unordered_map:
C++
#include <iostream>
#include <unordered_map>
using namespace std;
int main() {
unordered_map<int, string> my_map;
my_map[1] = "John";
my_map[2] = "Mary";
my_map[3] = "Peter";
// Tìm kiếm phần tử có key là 2
auto it = my_map.find(2);
if (it != my_map.end()) {
cout << it->second << endl; // Mary
}
return 0;
}
Trong ví dụ trên, chúng ta tạo một unordered_map lưu trữ các cặp tên và tuổi. Sau đó, chúng ta thêm ba phần tử vào unordered_map. Cuối cùng, chúng ta tìm kiếm phần tử có key là 2 và in ra giá trị của phần tử đó.
Một số phương thức thường được sử dụng trong unordered_map bao gồm:
begin()
: Trả về iterator tới phần tử đầu tiên của unordered_map.end()
: Trả về iterator tới phần tử sau cùng của unordered_map.find()
: Trả về iterator tới phần tử có key được chỉ định. Nếu không tìm thấy phần tử nào, iterator sẽ trả về my_map.end().insert()
: Thêm một phần tử vào unordered_map.erase()
: Xóa một phần tử khỏi unordered_map.empty()
: Kiểm tra xem unordered_map có rỗng hay không.size()
: Trả về số lượng phần tử trong unordered_map.
Unordered_map là một cấu trúc dữ liệu hữu ích cho các ứng dụng cần truy cập nhanh chóng các phần tử theo key.
Bài tập Unordered_map trong C++
Dưới đây là một số bài tập unordered_map trong C++ mà bạn có thể thực hành:
- Bài tập 1: Tạo một unordered_map lưu trữ các số nguyên và giá trị của chúng. Ví dụ:
C++
#include <iostream>
#include <unordered_map>
using namespace std;
int main() {
unordered_map<int, int> my_map;
my_map[1] = 10;
my_map[2] = 20;
my_map[3] = 30;
cout << my_map[1] << endl; // 10
cout << my_map[2] << endl; // 20
cout << my_map[3] << endl; // 30
return 0;
}
- Bài tập 2: Thêm, xóa và sửa các phần tử trong unordered_map.
C++
#include <iostream>
#include <unordered_map>
using namespace std;
int main() {
unordered_map<int, int> my_map;
// Thêm phần tử
my_map[1] = 10;
// Xóa phần tử
my_map.erase(1);
// Sửa phần tử
my_map[1] = 20;
cout << my_map[1] << endl; // 20
return 0;
}
- Bài tập 3: Tìm kiếm phần tử trong unordered_map.
C++
#include <iostream>
#include <unordered_map>
using namespace std;
int main() {
unordered_map<int, int> my_map;
my_map[1] = 10;
my_map[2] = 20;
my_map[3] = 30;
// Tìm kiếm phần tử có key là 2
auto it = my_map.find(2);
if (it != my_map.end()) {
cout << it->second << endl; // 20
}
return 0;
}
- Bài tập 4: Sắp xếp các phần tử trong unordered_map.
C++
#include <iostream>
#include <unordered_map>
#include <algorithm>
using namespace std;
int main() {
unordered_map<int, int> my_map;
my_map[1] = 10;
my_map[2] = 20;
my_map[3] = 30;
// Sắp xếp các phần tử theo key
for (auto it = my_map.begin(); it != my_map.end(); it++) {
cout << it->first << " " << it->second << endl;
}
// Sắp xếp các phần tử theo value
for (auto it = my_map.begin(); it != my_map.end(); it++) {
auto it_min = min_element(it, my_map.end(), [](const pair<int, int>& p1, const pair<int, int>& p2) {
return p1.second < p2.second;
});
cout << it_min->first << " " << it_min->second << endl;
}
return 0;
}
- Bài tập 5: Tạo một unordered_map lưu trữ các cặp tên và tuổi. Ví dụ:
C++
#include <iostream>
#include <unordered_map>
using namespace std;
int main() {
unordered_map<string, int> my_map;
my_map["John"] = 20;
my_map["Mary"] = 25;
my_map["Peter"] = 30;
// Tìm kiếm phần tử có key là "Mary"
auto it = my_map.find("Mary");
if (it != my_map.end()) {
cout << it->first << " " << it->second << endl; // Mary 25
}