logo

C++ の UNORDERED_MAP

順序なしマップ マップされた値とキー値を融合することによって作成された要素を保持する、関連付けられたコンテナーです。要素は、その要素によって具体的に識別されます。 キー値 、 そしてその マッピングされた値 キーに関する内容です。キーと値は両方とも、確立された、または ユーザー定義型 。順序なしマップは、要素を内部に格納する辞書型のデータ構造と考えることができます。保持する連続したペア (キー、値) 個別のキーを使用して特定の要素を迅速に取得できるようにします。

辞書順に

マップに提供されるキーは次のとおりです。 ハッシュ化された そのため、データ構造の速度はハッシュ関数に大きく依存しますが、平均するとコストは高くなります。 検索、挿入、削除 ハッシュ テーブルからは o(1) になります。

最悪の場合、特に大きな素数の場合、 時間の複雑さ からの範囲が可能です o(1) の上) 。この場合、テレの受信を避けるために地図を利用することを強くお勧めします。 (制限時間を超えました) 問題。

構文:

 Unordered_mapumap 

例:

 //A c++ program to check an unordered map in it. #include #include using namespace std; int main() { unordered_mapumap; umap[&apos;javatpoint&apos;] = 20; umap[&apos;regular&apos;] = 30; umap[&apos;distribute&apos;] = 40; for (auto y :umap) cout&lt;<y.first<< ' << y.second<<endl; } < pre> <p> <strong>Output</strong> </p> <pre> Distribute 40 Regular 30 Javatpoint 20 </pre> <p> <strong>Explanation:</strong> </p> <p>This output specifically justifies the fact that the <strong> <em>unordered map&apos;s</em> </strong> output value is generated in a random <strong> <em>key-to-value</em> </strong> manner while the map shows value and key in an ordered fashion.</p> <h2>Unordered set vs Unordered map</h2> <p>Some differences between Unordered set and Unordered map are as follows:</p> <h3>Unordered map</h3> <ul> <li>Only <strong> <em>(key-value)</em> </strong> pairs are found in the elements of an <strong> <em>unordered map</em> </strong> .</li> <li>Use the operator <strong>&apos;[]&apos;</strong> to extract a key&apos;s corresponding value from a map.</li> </ul> <h3>Unordered set</h3> <ul> <tr><td> <em>Key-value</em> </td> pairs are mostly utilised to determine whether a set is present or absent and are not always present in an unordered set. <li>Using the <strong> <em>find() function</em> </strong> , an element is searched for. Thus, there is no need for an operator.</li> </tr></ul> <p> <strong>Important point:</strong> </p> <p>For instance, take the issue of counting the frequency of individual words. Since, counts cannot be stored in <strong> <em>unordered set (or set),</em> </strong> we must instead use unordered map.</p> <h2>Map vs. Unordered map</h2> <p>Some differences between the Map and Unordered map are as follows:</p> <h3>Unordered map</h3> <ul> <li>Any order may be used to store the unordered map key.</li> <li>The implementation of unordered map results in an uneven tree structure, making it impossible to retain the order of the entries.</li> <li>Operations on an unordered map typically have an <strong> <em>o(1) time complexity</em> </strong> .</li> </ul> <h3>Map</h3> <ul> <li>The map is an ordered list of distinct keys.</li> <li>It is possible to preserve the elements&apos; order (by specific tree traversal) because map uses a balanced tree structure.</li> <li>The map operations have an <strong> <em>o time complexity (log n)</em> </strong> .</li> </ul> <h2>Procedures for unordered map</h2> <p>There are numerous functions that can be used with unordered map. The ones who are most helpful are:</p> <ul> <li>Operator =</li> <li>Operator[]</li> <li>Beginning and ending of the iterator</li> <li>Empty</li> <li>Size of the capacity</li> <li>For a lookup, locate and count.</li> <li>Insert and delete</li> </ul> <p>The full list of an unordered map&apos;s methods is shown below:</p> <p> <strong>At():</strong> </p> <p>This c++ unordered map method <strong> <em>returns</em> </strong> a reference to the value with the specified element as the <strong> <em>key k</em> </strong> .</p> <p> <strong>Begin():</strong> </p> <p>It provides a return value that is an <strong> <em>iterator pointing</em> </strong> to the first entry in the unordered map container.</p> <p> <strong>End():</strong> </p> <p>The unordered map container bucket returns an <strong> <em>iterator pointing</em> </strong> to the location after the final element ().</p> <p> <strong>Bucket():</strong> </p> <p>It returns the bucket number in the map&apos;s bucket count where the element with <strong> <em>key k</em> </strong> is placed.</p> <p> <strong>Bucket_count()</strong> </p> <p>The unordered map&apos;s total number of buckets is <strong> <em>tallied</em> </strong> using the bucket count function. It can be called without passing any parameters.</p> <p> <strong>Bucket size</strong> </p> <p>It gives the unordered map count&apos;s element count for each <strong> <em>bucket ()</em> .</strong> </p> <p> <strong>Count()</strong> </p> <p>It gives the unordered map count&apos;s element count for each <strong> <em>bucket ()</em> </strong> the number of elements in an unordered map with the specified key equal range should be counted.</p> <p> <strong>Equal_eange()</strong> </p> <p>It returns the boundaries of a range with all the container&apos;s items and a key that compares to <strong> <em>k</em> </strong> .</p> <p> <strong>Find()</strong> </p> <p>Gives an iterator to the element&apos;s empty.</p> <p> <strong>Position ()</strong> </p> <p>It determines whether the unordered map container&apos;s container is empty.</p> <p> <strong>Erase()</strong> </p> <p>Elements in the unordered map container can be deleted using the <strong> <em>erase()</em> </strong> function.</p> <p>Although the functions to view the internal bucket size, bucket count, used hash function, and various hash policies are also provided by the <strong> <em>c++11 library</em> </strong> , they are less helpful in practical applications. Using iterator, we may loop through every element in the unordered map.</p> <h3>Example:</h3> <pre> #include #include using namespace std; int main() { // when we will declare a umap it must be of type and here the key will be of string type and the mapped value of double in nature unordered_mapumap = { //in this we will insert the element in map directly {&apos;one&apos;, 1}, {&apos;two&apos;, 2}, {&apos;three&apos;, 3} }; // here wi will insert the values by the help of the [] operator umap[&apos;the value of pi&apos;] = 3.14; umap[&apos;the value of root2&apos;] = 1.414; umap[&apos;the value ofroot3&apos;] = 1.732; umap[&apos;the value oflog10&apos;] = 2.302; umap[&apos;the value ofloge&apos;] = 1.0; // inserting value by insert function umap.insert(make_pair(&apos;e&apos;, 2.718)); string key = &apos;the value of pi&apos;; // if key not found in map iterator // to end is returned if (umap.find(key) == umap.end()) cout&lt;&lt; key &lt;<' cannot retrieved

'; if key found then iterator to that is returned else cout<< 'retrieved '<< << '

'; ; (umap.find(key)="=" umap.end()) <<' retrieved
'; 'found <<endl; now we will iterate over all value of umap unordered_map::iterator itr; '
the entire elements : 
'; for (itr="umap.begin();" itr !="umap.end();" itr++) { cout<first ' <second } return 0; < pre> <p> <strong>Output</strong> </p> <pre> Retrieved the value of pi Lambda value cannot retrieved The entire elements : E 2.718 The value ofloge 1 The value oflog10 2.302 The value of root2 1.414 The value ofroot3 1.732 The value of pi 3.14 Two 2 Three 3 One 1 </pre> <h3>Example:</h3> <pre> // It is a c++ program to find rhefreqency of it ,in this we will use of unordered_map of every word #include using namespace std; void printfrequencies(const string &amp;str) { unordered_mapwordfreq; stringstream ss(str); string word; while (ss&gt;&gt; word) wordfreq[word]++; unordered_map:: iterator q; for (q = wordfreq.begin(); q != wordfreq.end(); q++) cout&lt;&lt; &apos;(&apos; <first << ', ' <second ')
'; } int main() { string str="java t points questions " 'learn programs'; printfrequencies(str); return 0; < pre> <p> <strong>Output</strong> </p> <pre> (programs, 1) (learn, 1) (questions, 1) (t, 1) (points, 1) (java, 1) </pre> <hr></first></pre></'></pre></y.first<<>

説明:

この出力は、次の事実を具体的に正当化します。 順序付けされていないマップの 出力値はランダムに生成されます キーから値へ マップでは値とキーが順序どおりに表示されます。

順序なしセットと順序なしマップ

順序なしセットと順序なしマップのいくつかの違いは次のとおりです。

順序なしマップ

  • のみ (キーと値) の要素でペアが見つかります。 順序なしマップ
  • 演算子を使用する 「[]」 マップからキーに対応する値を抽出します。

順序なしセット

    キーと値 ペアは主に、セットが存在するかどうかを判断するために使用され、順序付けされていないセットに常に存在するとは限りません。
  • を使用して、 find() 関数 、要素が検索されます。したがって、オペレーターは必要ありません。

大事なポイント:

たとえば、個々の単語の頻度を数えるという問題を考えてみましょう。カウントを保存できないため、 順序なしセット (またはセット)、 代わりに、順序なしマップを使用する必要があります。

マップと順序なしマップ

マップと順序なしマップのいくつかの違いは次のとおりです。

順序なしマップ

  • 順序のないマップ キーを格納するには、任意の順序を使用できます。
  • 順序なしマップを実装すると、ツリー構造が不均等になり、エントリの順序を保持できなくなります。
  • 順序なしマップでの操作には通常、 o(1) 時間計算量

地図

  • マップは、個別のキーの順序付きリストです。
  • マップはバランスの取れたツリー構造を使用しているため、(特定のツリーの走査によって) 要素の順序を保持することが可能です。
  • マップ操作には、 o 時間計算量 (log n)

順序なしマップの手順

順序なしマップで使用できる関数が多数あります。最も助けてくれる人は次のとおりです。

  • 演算子 =
  • オペレーター[]
  • イテレータの始まりと終わり
  • 空の
  • 容量の大きさ
  • 検索の場合は、検索して数えます。
  • 挿入と削除

順序なしマップのメソッドの完全なリストを以下に示します。

で():

この C++ 順序なしマップ メソッド 戻り値 指定された要素を含む値への参照 キーk

始める():

これは、次の戻り値を提供します。 反復子のポインティング 順序なしマップ コンテナーの最初のエントリに追加されます。

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

終わり():

順序付けされていないマップ コンテナ バケットは、 反復子のポインティング 最後の要素 () の後の位置に移動します。

バケツ():

マップのバケット数のバケット番号を返します。 キーk が置かれている。

キャシディ・ハッチンソンの教育

バケット数()

順序なしマップのバケットの総数は次のとおりです。 集計した バケットカウント機能を使用します。パラメータを渡さずに呼び出すことができます。

バケットサイズ

それぞれの順序なしマップの要素数を示します。 バケツ ()

カウント()

それぞれの順序なしマップの要素数を示します。 バケツ () 指定されたキーの等しい範囲を持つ順序なしマップ内の要素の数をカウントする必要があります。

等しい範囲()

bashのforループ

これは、コンテナのすべての項目と比較するキーを含む範囲の境界を返します。 k

探す()

要素の空の反復子を与えます。

位置 ()

順序なしマップ コンテナのコンテナが空かどうかを判断します。

消去()

順序なしマップコンテナ内の要素は、 消去() 関数。

内部バケット サイズ、バケット数、使用されているハッシュ関数、およびさまざまなハッシュ ポリシーを表示する機能も提供されていますが、 C++11ライブラリ 、実際のアプリケーションではあまり役に立ちません。イテレータを使用すると、順序なしマップ内のすべての要素をループできます。

例:

 #include #include using namespace std; int main() { // when we will declare a umap it must be of type and here the key will be of string type and the mapped value of double in nature unordered_mapumap = { //in this we will insert the element in map directly {&apos;one&apos;, 1}, {&apos;two&apos;, 2}, {&apos;three&apos;, 3} }; // here wi will insert the values by the help of the [] operator umap[&apos;the value of pi&apos;] = 3.14; umap[&apos;the value of root2&apos;] = 1.414; umap[&apos;the value ofroot3&apos;] = 1.732; umap[&apos;the value oflog10&apos;] = 2.302; umap[&apos;the value ofloge&apos;] = 1.0; // inserting value by insert function umap.insert(make_pair(&apos;e&apos;, 2.718)); string key = &apos;the value of pi&apos;; // if key not found in map iterator // to end is returned if (umap.find(key) == umap.end()) cout&lt;&lt; key &lt;<\' cannot retrieved

\'; if key found then iterator to that is returned else cout<< \'retrieved \'<< << \'

\'; ; (umap.find(key)="=" umap.end()) <<\' retrieved
\'; \'found <<endl; now we will iterate over all value of umap unordered_map::iterator itr; \'
the entire elements : 
\'; for (itr="umap.begin();" itr !="umap.end();" itr++) { cout<first \' <second } return 0; < pre> <p> <strong>Output</strong> </p> <pre> Retrieved the value of pi Lambda value cannot retrieved The entire elements : E 2.718 The value ofloge 1 The value oflog10 2.302 The value of root2 1.414 The value ofroot3 1.732 The value of pi 3.14 Two 2 Three 3 One 1 </pre> <h3>Example:</h3> <pre> // It is a c++ program to find rhefreqency of it ,in this we will use of unordered_map of every word #include using namespace std; void printfrequencies(const string &amp;str) { unordered_mapwordfreq; stringstream ss(str); string word; while (ss&gt;&gt; word) wordfreq[word]++; unordered_map:: iterator q; for (q = wordfreq.begin(); q != wordfreq.end(); q++) cout&lt;&lt; &apos;(&apos; <first << \', \' <second \')
\'; } int main() { string str="java t points questions " \'learn programs\'; printfrequencies(str); return 0; < pre> <p> <strong>Output</strong> </p> <pre> (programs, 1) (learn, 1) (questions, 1) (t, 1) (points, 1) (java, 1) </pre> <hr></first></pre></\'>

例:

 // It is a c++ program to find rhefreqency of it ,in this we will use of unordered_map of every word #include using namespace std; void printfrequencies(const string &amp;str) { unordered_mapwordfreq; stringstream ss(str); string word; while (ss&gt;&gt; word) wordfreq[word]++; unordered_map:: iterator q; for (q = wordfreq.begin(); q != wordfreq.end(); q++) cout&lt;&lt; &apos;(&apos; <first << \', \' <second \')
\'; } int main() { string str="java t points questions " \'learn programs\'; printfrequencies(str); return 0; < pre> <p> <strong>Output</strong> </p> <pre> (programs, 1) (learn, 1) (questions, 1) (t, 1) (points, 1) (java, 1) </pre> <hr></first>