Cơ Bản về Kiểu Dữ Liệu std::set trong C++

Cơ Bản về Kiểu Dữ Liệu "std::set" trong C++

std::set là kiểu dữ liệu được sử dụng khá phổ biến trong lập trình C++. Bài viết này sẽ hướng dẫn các bạn mới học C++ làm quen với kiểu dữ liệu std::set này.

std::set Là Gì

std::set là kiểu dữ liệu cho phép lưu trữ nhiều giá trị khác nhau gọi là phần tử, các phần tử trong cùng một std::set() có cùng một kiểu dữ liệu và duy nhất.

Ví dụ một std::set với các phần tử có kiểu dữ liệu int như sau:

std::set setOfIntegers
setOfIntegers.insert(1);
setOfIntegers.insert(2);
setOfIntegers.insert(3);

Khi làm việc với kiểu dữ liệu std::set trong C++, bạn cần nhớ hai tính chất đặc trưng của kiểu dữ liệu này đó là:

  • Mỗi phần tử trong cùng một std::set là duy nhất (hay unique). Điều này có nghĩa rằng nếu bạn không thể lưu trữ hai phần tử có giá trị như nhau trong cùng một std::set.
  • Tất cả các phần trử trong cùng một std::set phải thuộc cùng một kiểu dữ liệu.

Tạo Một Set

Để sử dụng kiểu dữ liệu std::set thì điều đầu tiên bạn cần làm là tham chiếu tới thư viện chứa kiểu dữ liệu này:

#include
#include
int main()
{
}

Sau đó bạn có thể tạo một set với các phần tử có kiểu dữ liệu nhất định:

#include
#include
int main()
{
    std::set mySetOfIntegers
}

Để tạo một set với các phần tử có kiểu dữ liệu thuộc một class cho trước:

#include
#include
int main()
{
    class MySampleClass;
    std::set setOfSampleClassType;
    return 0;
}

Thêm Phần Tử vào Set

Để thêm một phần tử vào std::set chúng ta sử dụng method insert():

#include
#include
int main()
{
    std::set mySetOfIntegers;
    mySetOfIntegers.insert(1);
    mySetOfIntegers.insert(2);
    mySetOfIntegers.insert(3);
    return 0;
}

Do mỗi phần tử trong std::set là duy nhất nên trong trường hợp bạn thêm hai phần tử có cùng một giá trị thì chỉ phần tử đầu tiên được thêm vào set. Trong ví dụ dưới đây thì mySetOfIntegers sẽ chỉ có 3 phần tử thay vì 4:

#include
#include
int main()
{
    std::set mySetOfIntegers;
    mySetOfIntegers.insert(1);
    mySetOfIntegers.insert(2);
    mySetOfIntegers.insert(3);
    mySetOfIntegers.insert(1);
    return 0;
}
#include
#include
int main()
{
    std::set mySetOfIntegers;
    mySetOfIntegers.insert(1);
    mySetOfIntegers.insert(2);
    mySetOfIntegers.insert(3);
    mySetOfIntegers.insert(1);

    // Chỉ 3 phần tử được thêm vào "mySetOfIntegers"
    std::cout<<"Số lượng phần tử: "<

Hiển thị:


Số lượng phần tử: 3

Lặp Qua Set

Để lặp qua một set bạn sử dụng hai phương thức begin() và end() của set kết hợp với một iterator.

Ví dụ để lặp qua mySetOfIntegers bạn có thể sử dụng đoạn code sau:


#include
#include
int main()
{
        ...
        for (std::set::iterator it=mySetOfIntegers.begin(); it!=setOfNumbers.end(); ++it)
        std::cout << ' ' << *it;

    std::cout<<"\n";
        return 0;
}

Tìm Phần Tử Trong Set

Để tìm phần tử trong Set chúng ta sử dụng phương thức find() của std::set kết hợp với một iterator:

        it = mySetOfIntegers.find("1");

    if ( it != mySetOfIntegers.end() )
        std::cout<<"'Tìm thấy số '1' trong Set"<<std::endl;
    else
        std::cout<<"Không tìm thấy số '1' trong Set"<<std::endl;

    Guest

    - 1970/01/01 Trả lời

    làm sao để in ra các giá trị trong set ạ. ví dụ for(int i=0;i<n; i++){s.insert(a[i])}
    sau đó em muốn in ra các phần tử trong s thì làm sao ạ

    Guest

    - 1970/01/01 Trả lời

    bạn cho chạy qua set giống lệnh trên rồi yêu cầu xuất ra con trỏ là được bạn ạ
    ví dụ:

    include<bits/stdc++.h>

    using namespace std;
    int main(){
    set<int> s;
    s.insert(1);
    s.insert(2);
    s.insert(3).
    for(auto i:s)
    {
    cout<<i<<" ";
    }
    // hoac ban cung co the code ntn
    for(auto i=s.begin();i!=s.end();i++)
    {
    cout<<i<<" "; ( co dau sao truoc i day minh viet o day no ko hien len )
    }
    // day cung la 1 cach
    set<int>::iterator i;
    for( i=s.begin();i!=s.end();i++)
    {
    cout<<
    i<<" ";( co dau sao truoc i day minh viet o day no ko hien len )
    }
    return 0;
    }
    tham khao them
    https://www.geeksforgeeks.org/set-in-cpp-stl/

    Guest

    - 1970/01/01 Trả lời

    cho mình hỏi làm sao để sắp xếp set theo ý mình

    Guest

    - 1970/01/01 Trả lời

    bạn có thể tham khảo đoạn code sau nhé:

    include<iostream>

    include<set>

    using namespace std;

    struct cmp{
    bool operator() (int a,int b) {return a>b;}
    };

    int main() {

    set <int,cmp> s;
    
    s.insert(1);  // s={1}
    
    s.insert(4);  // s={4,1}
    
    s.insert(2);  // s={4,2,1}
    
    s.insert(9);  // s={9,4,2,1}
    
    for (set<int>:: iterator it = s.begin(); it != s.end(); it++){
        cout<< *it << " ";
    }
    
        return 0;

    }

    Guest

    - 1970/01/01 Trả lời

    anh ơi thế còn xóa phần tử trong set thì thế nào ạ

    Guest

    - 1970/01/01 Trả lời

    Cho mình hỏi làm sao để viết 1 code thực hiện các phép toán trên kiểu tập hợp ạ

    Guest

    - 1970/01/01 Trả lời

    Ad ơi, cho em hỏi về độ phức tạp khi thêm vào xoá ạ.

    Guest

    - 1970/01/01 Trả lời

    Ad ơi, làm thế nào để nhập phần tử từ từ bàn phím nhỉ(input)

10 bình luận