logo

C++ におけるマップと unowned_map

前提条件: std::マップ 、std::unowned_map
効率という点では、マップと順序なしマップの間には大きな違いがあります。
どちらを使用するかを決定するには、両方の内部動作を知る必要があります。

違い :



 | map | unordered_map --------------------------------------------------------- Ordering | increasing order | no ordering | of keys(by default) | Implementation | Self balancing BST | Hash Table | like Red-Black Tree | search time | log(n) | O(1) ->平均 | | O(n) -> 最悪の場合の挿入時間 | log(n) + リバランス |検索と同じ 削除時刻 | log(n) + リバランス |検索と同じ>>' 

std::map を使用する場合

  • 順序付けされたデータが必要です。
  • (ソートされた順序で) データを印刷/アクセスする必要があります。
  • 要素の先行/後続が必要です。
  • その他のケースについては、ハッシュ テーブルに対する BST の利点を参照してください。

CPP

java 現在の日付を取得する








// CPP program to demonstrate use of std::map> #include> int> main()> {> >// Ordered map> >std::map<>int>,>int>>注文;>>' // Mapping values to keys> >order[5] = 10;> >order[3] = 500;> >order[20] = 100;> >order[1] = 1;> >// Iterating the map and> >// printing ordered values> >for> (>auto> i = order.begin(); i> >!= order.end(); i++) {> >std::cout << ' : ' ' '; } }>

文字を文字列に変換する方法

>

出力

酸特性データベース
1 : 1 3 : 500 5 : 10 20 : 100>

次の場合に std::unowned_map を使用します。

  • いくつかのデータ (例 – 文字列) の数を保持する必要があり、順序付けは必要ありません。
  • 単一要素へのアクセスが必要です。つまり、トラバーサルは必要ありません。

CPP




// CPP program to demonstrate use of> // std::unordered_map> #include> int> main()> {> >// Unordered map> >std::unordered_map<>int>,>int>>注文;>>' // Mapping values to keys> >order[5] = 10;> >order[3] = 500;> >order[20] = 100;> >order[1] = 1;> >// Iterating the map and> >// printing unordered values> >for> (>auto> i = order.begin();> >i != order.end(); i++)> >{> >std::cout << ' : ' ' '; } }>

>

整数を文字列Javaに変換します

>

出力

1 : 1 20 : 100 3 : 500 5 : 10>

違いを表形式で見てみましょう -:

地図 順序なしマップ
1. マップは #include ヘッダー ファイルで定義されます unowned_map は #include ヘッダー ファイルで定義されています
2. 実装されているのは、 赤黒の木 ハッシュテーブルを使用して実装されます。
3. 遅いです。 速いですね。
4. 時間計算量 操作の場合は O(log N) 操作の時間計算量は O(1)
5. map は、要素をキーと値のペアとして、キーでソートされた順序で格納するために使用されます。 unowned_map は、要素をキーと値のペアとしてソートされていない順序で格納するために使用されます。