Computer >> Máy Tính >  >> Lập trình >> C ++

set so với unsrdered_set trong C ++ STL (3)


Trong bài viết này, chúng ta hãy hiểu những gì được đặt và không có thứ tự_set trong C ++ STL và từ đó có được kiến ​​thức về sự khác biệt giữa chúng.

Cái gì được đặt?

Một bộ là một vùng chứa liên kết chứa một tập hợp các đối tượng duy nhất được sắp xếp của loại Khoá. Mỗi phần tử chỉ có thể xuất hiện một lần, vì vậy không được phép trùng lặp. Người dùng có thể tạo tập hợp bằng cách chèn các phần tử theo bất kỳ thứ tự nào và tập hợp đó sẽ trả về dữ liệu đã sắp xếp cho người dùng, có nghĩa là tập hợp chứa định nghĩa để sắp xếp dữ liệu được trừu tượng hóa từ người dùng.

Các lý do chính khi thiết lập có thể được sử dụng là -

  • Khi dữ liệu được sắp xếp là bắt buộc

  • Khi các giá trị trùng lặp không được yêu cầu, chỉ cần dữ liệu duy nhất

  • Khi chúng tôi muốn sử dụng Cây tìm kiếm nhị phân thay vì Bảng băm.

  • Khi không có vấn đề gì về thời gian tìm kiếm vì nó có độ phức tạp của log (n) trong tìm kiếm

Đầu vào -

set = {2, 1, 5, 6, 9, 3, 2}

Đầu ra -

1, 2, 3, 5, 6, 9

Lưu ý - các giá trị được chèn theo thứ tự ngẫu nhiên, nhưng chúng được sắp xếp theo tập hợp và các giá trị trùng lặp cũng bị xóa khỏi tập hợp.

Ví dụ

#include <iostream>
#include <set>
using namespace std;
int main(){
   //creating an array
   int arr[] = {2, 1, 5, 6, 9, 3, 2};
   int size = sizeof(arr)/ sizeof(arr[0]);
   //declaring a set
   set<int> SET;
   //inserting elements from an array to set using insert()
   for(int i = 0; i<size; i++){
      SET.insert(arr[i]);
   }
   set<int>::iterator it;
   cout<<"Values in set are: ";
   for(it = SET.begin(); it != SET.end(); it++){
      cout <<*it<<" ";
   }
}

Đầu ra

Đầu ra cho đoạn mã trên sẽ là -

Values in set are: 1 2 3 5 6 9

unardered_set là gì?

Một tập_cấp_không có thứ tự là một vùng chứa liên kết chứa một tập dữ liệu không có thứ tự được chèn một cách ngẫu nhiên. Mỗi phần tử chỉ có thể xuất hiện một lần, vì vậy không được phép trùng lặp. Người dùng có thể tạo một tập hợp không có thứ tự bằng cách chèn các phần tử theo bất kỳ thứ tự nào và một tập hợp không có thứ tự sẽ trả về dữ liệu theo bất kỳ thứ tự nào, tức là biểu mẫu không có thứ tự.

Các lý do chính khi bộ không có thứ tự có thể được sử dụng là -

  • Khi không yêu cầu dữ liệu được sắp xếp có nghĩa là dữ liệu có sẵn ở định dạng không có thứ tự

  • Khi các giá trị trùng lặp không được yêu cầu, chỉ cần dữ liệu duy nhất

  • Khi chúng ta muốn sử dụng Bảng băm thay vì Cây tìm kiếm nhị phân.

  • Khi cần tìm kiếm nhanh hơn vì nó mất O (1) trong trường hợp Trung bình và O (n) trong trường hợp xấu hơn

Đầu vào -

set = {2, 1, 5, 6, 9, 3, 2}

Đầu ra -

3, 9, 6, 5, 2

Ví dụ

#include <iostream>
#include <unordered_set>
using namespace std;
int main (){
   int arr[] = { 2, 1, 5, 6, 9, 3, 2 };
   int size = sizeof (arr) / sizeof (arr[0]);
   unordered_set < int >U_SET;
   //inserting elements from an array to an unordered_set using insert()
   for (int i = 0; i < size; i++){
      U_SET.insert (arr[i]);
   }
   unordered_set < int >::iterator it;
   cout << "Values in unordred set are: ";
   for (it = U_SET.begin (); it != U_SET.end (); it++){
      cout << *it << " ";
   }
}

Đầu ra

Đầu ra cho đoạn mã trên sẽ là -

Values in unordered set are: 3 6 5 9 2 1