Câu lạc bộ Tin học dành cho học sinh Tiểu học

HỌC C++ ⚙️ TIẾT 15: STL (Standard Template Library) NÂNG CAO

Trạng thái

♥ Lượt xem: 19
♥ Lượt phản hồi: 1

Tham gia
28/10/2025
Bài viết
368
Điểm Like
1,748
Điểm Uy tín
364,562
Tí Tinh Tế
Miu Mềm Mại
Rồng Rực Rỡ
Tỵ Tinh Tường
Heo Hiền Hậu
Tuổi Mùi
Phù điêu Hổ
Phù điêu Rồng
Hổ Hào Hiệp
Ngựa Ngộ Nghĩnh
Dê Dịu Dàng
Tích cực hoạt động

🎯 Mục tiêu tiết học:​

  • Hiểu STL là gì và tại sao nó cực mạnh.
  • Làm quen với các cấu trúc dữ liệu hiện đại:
    1. pair – cặp dữ liệu
    2. map – ánh xạ khóa → giá trị
    3. set – tập hợp không trùng
    4. unordered_map, unordered_set – siêu nhanh nhờ bảng băm
    5. tuple – nhóm dữ liệu nhiều phần tử
  • Ứng dụng: Thống kê và sắp xếp dữ liệu trong thực tế.

🧩 1. STL là gì?​

STL (Standard Template Library) là thư viện cấu trúc dữ liệu và thuật toán sẵn có của C++, giúp bạn tiết kiệm hàng trăm dòng code.
✅ Bạn có thể lưu, sắp xếp, tìm kiếm dữ liệu mà không cần viết lại từ đầu.
✅ STL bao gồm:
  • Containers (cấu trúc dữ liệu)vector, map, set, queue, stack, list, ...
  • Algorithms (thuật toán)sort(), find(), count(), ...
  • Iterators (bộ lặp) → truy cập dữ liệu trong container.

⚙️ 2. pair – Lưu hai giá trị liên quan​

Mã:
#include <iostream>
#include <utility>  // chứa pair
using namespace std;

int main() {
    pair<string, int> player = {"Huy", 1500};

    cout << "Ten: " << player.first << endl;
    cout << "Diem: " << player.second << endl;
}
📘 Ứng dụng:
Dùng để lưu “tên + điểm”, “ID + giá trị”, “tọa độ x,y”...

🔑 3. map – Từ điển có thứ tự (key → value)​

map sắp xếp tự động theo khóa, không trùng khóa.
Mã:
#include <iostream>
#include <map>
using namespace std;

int main() {
    map<string, int> score;

    score["Huy"] = 90;
    score["Linh"] = 85;
    score["Khang"] = 95;

    for (auto p : score) {
        cout << p.first << ": " << p.second << endl;
    }
}
📗 Kết quả:
Mã:
Huy: 90
Khang: 95
Linh: 85
📘 Các thao tác quan trọng:
HàmTác dụng
score[key]Truy cập hoặc thêm phần tử
erase(key)Xóa phần tử
count(key)Kiểm tra tồn tại
size()Số phần tử
clear()Xóa tất cả

🧱 4. set – Tập hợp không trùng lặp, tự sắp xếp​

Mã:
#include <iostream>
#include <set>
using namespace std;

int main() {
    set<int> nums = {5, 2, 2, 9, 1};

    nums.insert(3);
    nums.erase(9);

    for (int x : nums) cout << x << " ";
}
📘 Kết quả:
Mã:
1 2 3 5
💡 Đặc điểm:
  • Mỗi phần tử chỉ xuất hiện 1 lần.
  • Tự động sắp xếp tăng dần.

⚡ 5. unordered_mapunordered_set

Giống map/set nhưng không sắp xếp, đổi lại tốc độ tìm kiếm cực nhanh (O(1)).
Mã:
#include <iostream>
#include <unordered_map>
using namespace std;

int main() {
    unordered_map<string, int> age = {
        {"Huy", 18},
        {"Linh", 19},
        {"An", 17}
    };

    cout << "Tuoi cua Linh: " << age["Linh"] << endl;
}
📗 Khi nào dùng unordered_map?
  • Khi bạn cần truy xuất siêu nhanh.
  • Không cần dữ liệu được sắp xếp.

🔢 6. tuple – Gói nhiều giá trị khác kiểu​

Mã:
#include <iostream>
#include <tuple>
using namespace std;

int main() {
    tuple<string, int, double> student("Huy", 18, 9.5);

    cout << get<0>(student) << " - Tuoi: " << get<1>(student)
         << " - Diem: " << get<2>(student) << endl;
}
💡 Ứng dụng:
Dùng khi bạn muốn trả về nhiều giá trị từ một hàm, ví dụ:
Mã:
tuple<int,int,int> RGB() { return {255,128,64}; }

🧠 7. Bài tập thực tế: Thống kê điểm học sinh 🎓

Mã:
#include <iostream>
#include <map>
#include <vector>
#include <algorithm>
using namespace std;

int main() {
    map<string, int> score = {
        {"Huy", 90}, {"Linh", 85}, {"An", 95}, {"Khang", 75}
    };

    vector<pair<string, int>> arr(score.begin(), score.end());

    sort(arr.begin(), arr.end(),
         [](auto &a, auto &b) { return a.second > b.second; });

    cout << "BANG XEP HANG DIEM:\n";
    for (auto &p : arr)
        cout << p.first << " - " << p.second << endl;
}
📊 Kết quả:
Mã:
An - 95
Huy - 90
Linh - 85
Khang - 75

🎓 TỔNG KẾT TIẾT 15​

Cấu trúcDữ liệuĐặc điểm
pair2 giá trịDễ dùng cho key-value nhỏ
mapkey → valueCó thứ tự, không trùng khóa
setTập hợpKhông trùng, tự sắp xếp
unordered_mapkey → valueKhông sắp xếp, nhanh
tupleNhiều giá trị khác kiểuDùng để trả nhiều kết quả
 

Trạng thái

♥ Lượt xem: 19
♥ Lượt phản hồi: 1

Trên Bottom