C++ 中 set、multiset、unordered_set 和 unordered_multiset 的區別


在這裡,我們將瞭解 C++ 中 set、multiset、unordered_set 和 unordered_multiset 的區別。讓我們透過一些示例來了解它們的特性。

Set

set 的特性如下:

  • 按排序順序儲存資料
  • 僅儲存唯一值
  • 可以插入或刪除資料,但不能更改資料
  • 可以使用起始和結束迭代器刪除多個元素
  • 可以使用迭代器遍歷
  • set 使用二叉搜尋樹實現

現在讓我們來看一個例子

示例

#include <iostream>
#include <set>
using namespace std;
main() {
   int data[15] = {11, 55, 22, 66, 33, 22, 11, 44, 77, 88, 66, 99, 66, 23, 41};
   set<int> my_set;
   for(int i = 0; i<15; i++) {
      my_set.insert(data[i]);
   }
   set<int>::iterator it;
   for(it = my_set.begin(); it != my_set.end(); it++) {
      cout << "Item: " << *it << endl;
   }
}

輸出

Item: 11
Item: 22
Item: 23
Item: 33
Item: 41
Item: 44
Item: 55
Item: 66
Item: 77
Item: 88
Item: 99

Multiset

multiset 的特性如下:

  • 按排序順序儲存資料
  • 允許儲存重複資料
  • 可以使用起始和結束迭代器刪除多個元素。

現在讓我們來看一個例子。

示例

#include <iostream>
#include <set>
using namespace std;
main() {
   int data[15] = {11, 55, 22, 66, 33, 22, 11, 44, 77, 88, 66, 99, 66, 23, 41};
   multiset<int> my_set;
   for(int i = 0; i<15; i++) {
      my_set.insert(data[i]);
   }
   multiset<int>::iterator it;
   for(it = my_set.begin(); it != my_set.end(); it++) {
      cout << "Item: " << *it << endl;
   }
}

輸出

Item: 11
Item: 11
Item: 22
Item: 22
Item: 23
Item: 33
Item: 41
Item: 44
Item: 55
Item: 66
Item: 66
Item: 66
Item: 77
Item: 88
Item: 99

Unordered Set

multiset 的特性如下:

  • 資料可以按任意順序放置
  • 重複資料將被丟棄
  • 此 set 使用雜湊表建立
  • 我們只能刪除迭代器指向的單個元素

現在讓我們來看一個例子。

示例

#include <iostream>
#include <unordered_set>
using namespace std;
main() {
   int data[15] = {11, 55, 22, 66, 33, 22, 11, 44, 77, 88, 66, 99, 66, 23, 41};
   unordered_set<int> my_set;
   for(int i = 0; i<15; i++) {
      my_set.insert(data[i]);
   }
   unordered_set<int>::iterator it;
   for(it = my_set.begin(); it != my_set.end(); it++) {
      cout << "Item: " << *it << endl;
   }
}

輸出

Item: 11
Item: 55
Item: 22
Item: 66
Item: 33
Item: 44
Item: 77
Item: 88
Item: 99
Item: 23
Item: 41

Unordered Multiset

multiset 的特性如下:

  • 資料可以按任意順序放置
  • 允許重複資料
  • 此 set 使用雜湊表建立
  • 我們只能刪除迭代器指向的單個元素

現在讓我們來看一個例子。

示例

#include <iostream>
#include <unordered_set>
using namespace std;
main() {
   int data[15] = {11, 55, 22, 66, 33, 22, 11, 44, 77, 88, 66, 99, 66, 23, 41};
   unordered_multiset<int> my_set;
   for(int i = 0; i<15; i++) {
      my_set.insert(data[i]);
   }
   unordered_multiset<int>::iterator it;
   for(it = my_set.begin(); it != my_set.end(); it++) {
      cout << "Item: " << *it << endl;
   }
}

輸出

Item: 11
Item: 55
Item: 22
Item: 66
Item: 33
Item: 22
Item: 11
Item: 44
Item: 77
Item: 88
Item: 66
Item: 99
Item: 66
Item: 23
Item: 41

更新於: 2019年7月30日

266 次瀏覽

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告

© . All rights reserved.