C ++
 Computer >> コンピューター >  >> プログラミング >> C ++

C ++でのset、multiset、unordered_set、unordered_multisetの違い


ここでは、C ++でのset、multiset、unordered_set、およびunordered_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};
   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

マルチセット

セットのプロパティは次のようになります-

  • データを並べ替えられた順序で保存します
  • 重複データを保存できます
  • 開始イテレータと終了イテレータを使用して複数の要素を削除できます。

例を見てみましょう。

#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

順不同セット

セットのプロパティは次のようになります-

  • データは任意の順序で配置できます
  • 重複データは破棄されます
  • このセットはハッシュテーブルを使用して作成されます
  • イテレータが指している要素を1つだけ消去できます

例を見てみましょう。

#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

順序付けられていないマルチセット

セットのプロパティは次のようになります-

  • データは任意の順序で配置できます
  • 重複データは許可されます
  • このセットはハッシュテーブルを使用して作成されます
  • イテレータが指している要素を1つだけ消去できます

例を見てみましょう。

#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

  1. C++の「struct」と「typedefstruct」の違いは?

    C ++では、structとtypedef structの間に違いはありません。これは、C ++では、すべてのstruct / union / enum/class宣言が暗黙的にtypedefであるかのように動作するためです。 ed、同じ名前の別の宣言によって名前が隠されていない限り。 typedefを前方宣言できないという微妙な違いが1つありますが、したがって、typedefオプションの場合、どこでも使用する前に、typedefを含むファイルを含める必要があります。

  2. C++文字列定数と文字定数の違い

    C ++では、一重引用符で囲まれた文字は文字リテラルです。文字型です。たとえば、「a」は、ASCIIベースのシステムでは値97のchar型です。 二重引用符で囲まれた1文字または文字列は、文字列リテラルを表します。これはconstchar[]型であり、文字列の長さ+1のサイズの配列を参照します。その余分な文字は文字列の終わりを示すためにあります。 文字列リテラルは、「abcdefg」のように任意の長さにすることができます。文字リテラルには、ほとんどの場合、1文字だけが含まれます。これらが印刷されるとき、文字列リテラルは、文字列で最初の\0またはNULL文字が検出されるまで印刷されます。