Menu
CoddyTech

Duyệt qua tập hợ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 39 trên 56.

Giờ bạn đã biết cách thêm, kiểm tra và xóa phần tử khỏi tập hợp, hãy cùng tìm hiểu cách duyệt qua tất cả phần tử trong một tập hợp. Vòng lặp for dựa trên phạm vi là cách rõ ràng nhất để duyệt từng phần tử.

Sau đây là cách lặp qua một tập hợp:

std::set<std::string> fruits = {"banana", "apple", "cherry"};

for (const std::string& fruit : fruits) {
    std::cout << fruit << std::endl;
}

Điều quan trọng nhất cần nhớ là tập hợp tự động duy trì thứ tự đã sắp xếp. Khi bạn duyệt qua tập hợp trái cây ở trên, kết quả sẽ là "apple", "banana", "cherry", chứ không phải theo thứ tự bạn thêm chúng vào. Việc tự động sắp xếp này là một trong những ưu điểm chính của việc sử dụng std::set.

Việc lặp qua tập hợp đã được sắp xếp này giúp tập hợp trở nên lý tưởng để hiển thị dữ liệu theo thứ tự bảng chữ cái hoặc thứ tự số mà không cần tự sắp xếp. Dù bạn làm việc với số, chuỗi hoặc các kiểu dữ liệu có thể so sánh khác, tập hợp luôn hiển thị chúng theo thứ tự tự nhiên đã sắp xếp.

challenge icon

Thử thách

Dễ

Tạo một chương trình minh họa tính năng tự động sắp xếp của std::set bằng cách thêm các từ vào một tập hợp, sau đó lặp qua chúng để hiển thị theo thứ tự bảng chữ cái. Thử thách này sẽ kiểm tra mức độ hiểu của bạn về vòng lặp for dựa trên phạm vi (range-based for loop) với tập hợp và cách tập hợp duy trì thứ tự đã sắp xếp.

Chương trình sẽ nhận các đầu vào sau:

  • Một số nguyên n biểu thị số từ cần thêm vào tập hợp
  • Sau đó là n chuỗi biểu thị các từ cần chèn vào tập hợp

Chương trình của bạn cần:

  1. Tạo một std::set<std::string> rỗng
  2. Đọc số từ cần thêm
  3. Dùng vòng lặp để đọc từng từ và chèn từ đó vào tập hợp bằng phương thức .insert()
  4. Dùng vòng lặp for dựa trên phạm vi để lặp qua tập hợp và in ra từng từ
  5. Sau khi in ra tất cả các từ, hiển thị tổng số từ duy nhất trong tập hợp

Dùng định dạng đầu ra chính xác sau:

Với mỗi từ trong tập hợp (theo thứ tự bảng chữ cái):

[word]

Tóm tắt ở cuối:

Total unique words: [count]

Dùng vòng lặp for dựa trên phạm vi với cú pháp for (const std::string& word : wordSet) để lặp qua tất cả phần tử trong tập hợp. Tập hợp sẽ tự động đưa ra các từ theo thứ tự bảng chữ cái, thể hiện một trong những ưu điểm chính của việc sử dụng std::set. Hãy nhớ rằng nếu đầu vào có các từ trùng lặp, tập hợp sẽ tự động bỏ qua chúng, vì vậy chỉ các từ duy nhất mới được hiển thị.

Tự làm thử

#include <iostream>
#include <set>
#include <string>
using namespace std;

int main() {
    // Đọc số lượng từ
    int n;
    cin >> n;
    
    // Tạo một tập hợp (set) rỗng để lưu các từ
    set<string> wordSet;
    
    // TODO: Viết code của bạn vào đây
    // Đọc n từ và thêm chúng vào tập hợp
    // Dùng vòng lặp (loop) for dựa trên phạm vi để duyệt tập hợp và in ra từng từ
    // In ra tổng số từ không trùng lặp
    
    return 0;
}
quiz iconTự kiểm tra

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

Tự luyện tập: Trình biên dịch C++ online