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<int> 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<iostream>
#include<set>
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<iostream>
#include<set>
int main()
{
    std::set<int> 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<iostream>
#include<set>
int main()
{
    class MySampleClass;
    std::set<MySampleClass> 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<iostream>
#include<set>
int main()
{
    std::set<int> 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<iostream>
#include<set>
int main()
{
    std::set<int> mySetOfIntegers;
    mySetOfIntegers.insert(1);
    mySetOfIntegers.insert(2);
    mySetOfIntegers.insert(3);
    mySetOfIntegers.insert(1);
    return 0;
}
#include<iostream>
#include<set>
int main()
{
    std::set<int> 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ử: "<<mySetOfIntegers.size()<<std::endl;
    return 0;
}

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()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<iostream>
#include<set>
int main()
{
        ...
        for (std::set<int>::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;

2 Bình Luận

Cẩm Thị Cẩm Thị

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 ạ

Minh Đỗ Minh Đỗ

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/

Quang Lê Quang Lê

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

Thanh Minh Thanh Minh

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;

}

Nội dung không được để trống

Bài Viết Liên Quan