Trang tài liệu
Khóa học C++ nền tảng
Chương 11. Thư viện mẫu chuẩn (STL)
Bộ lưu trữ C++

Bộ lưu trữ C++

Bộ lưu trữ C++ là một phần của Thư viện template chuẩn (STL) cung cấp cấu trúc dữ liệu để lưu trữ và sắp xếp dữ liệu. Có nhiều loại lưu trữ, mỗi loại có đặc điểm và trường hợp sử dụng riêng. Ở đây, chúng tôi thảo luận về một số bộ lưu trữ thường được sử dụng:

1. Vecto

Các vecto là các mảng động có thể tự thay đổi kích thước khi cần. Chúng lưu trữ các phần tử trong một vị trí bộ nhớ liền kề, cho phép truy cập ngẫu nhiên nhanh chóng bằng cách sử dụng các chỉ số. Ví dụ:

#include <iostream>
#include <vector>
 
int main() {
    std::vector<int> vec = {1, 2, 3, 4, 5};
 
    vec.push_back(6); // Thêm một phần tử vào cuối
 
    std::cout << "Vector contains:";
    for (int x : vec) {
        std::cout << ' ' << x;
    }
    std::cout << std::endl;
}

2. List

Một list là một danh sách được liên kết kép cho phép các phần tử được chèn hoặc xóa khỏi bất kỳ vị trí nào trong thời gian cố định. Nó không hỗ trợ truy cập ngẫu nhiên. Danh sách tốt hơn vecto cho các tình huống mà bạn cần thường xuyên chèn hoặc xóa các phần tử ở giữa. Ví dụ:

#include <iostream>
#include <list>
 
int main() {
    std::list<int> lst = {1, 2, 3, 4, 5};
 
    lst.push_back(6); // Thêm một phần tử vào cuối
    
    std::cout << "List contains:";
    for (int x : lst) {
        std::cout << ' ' << x;
    }
    std::cout << std::endl;
}

3. Map

Map là một vùng chứa kết hợp lưu trữ các cặp khóa-giá trị. Nó hỗ trợ truy xuất các giá trị dựa trên các khóa của chúng. Các phím được sắp xếp theo thứ tự tăng dần theo mặc định. Ví dụ:

#include <iostream>
#include <map>
 
int main() {
    std::map<std::string, int> m;
 
    m["one"] = 1;
    m["two"] = 2;
 
    std::cout << "Map contains:" << std::endl;
    for (const auto &pair : m) {
        std::cout << pair.first << ": " << pair.second << std::endl;
    }
}

4. Unordered_map

Tương tự như map, unordered map (map không có thứ tự) lưu trữ các cặp khóa-giá trị, nhưng nó được triển khai bằng cách sử dụng bảng băm. Điều này có nghĩa là unordered_map có hiệu suất trường hợp trung bình nhanh hơn so với map, vì nó không duy trì thứ tự đã sắp xếp. Tuy nhiên, hiệu suất trong trường hợp xấu nhất có thể kém hơn map. Ví dụ:

#include <iostream>
#include <unordered_map>
 
int main() {
    std::unordered_map<std::string, int> um;
 
    um["one"] = 1;
    um["two"] = 2;
 
    std::cout << "Unordered map contains:" << std::endl;
    for (const auto &pair : um) {
        std::cout << pair.first << ": " << pair.second << std::endl;
    }
}

Đây chỉ là một vài ví dụ về bộ lưu trữ C++. Có các loại bộ lưu trữ khác, chẳng hạn như set, multiset, deque, stack, queue và priority_queue. Mỗi bộ lưu trữ có các trường hợp sử dụng riêng và các đặc điểm riêng. Tìm hiểu về những bộ lưu trữ này và thời điểm sử dụng chúng có thể cải thiện đáng kể hiệu suất và hiệu quả của bạn trong việc sử dụng C++.