logo

UNORDERED_MAP IN C++

De ongeordende kaart is een bijbehorende container die elementen bevat die zijn gemaakt door een toegewezen waarde te combineren met een sleutelwaarde. Het element wordt specifiek geïdentificeerd door zijn sleutel waarde , en de waarde in kaart gebracht is de inhoud gerelateerd aan de sleutel. Sleutels en waarden kunnen beide van een gevestigde of gevestigde waarde zijn door de gebruiker gedefinieerd type . Een ongeordende kaart kan worden gezien als een datastructuur van het woordenboektype die elementen in zichzelf opslaat. De opeenvolgende paren die het bevat (sleutel waarde) maken het snel ophalen van een specifiek element mogelijk met behulp van de individuele sleutel.

wat is maven

De sleutel die bij de kaart wordt geleverd, is gehasht in de indices van een hashtabel. Daarom hangt de snelheid van de datastructuur sterk af van de hashfunctie, maar gemiddeld genomen van de kosten van zoeken, invoegen en verwijderen uit de hashtabel is o(1).

In het ergste geval, vooral voor grote priemgetallen, is dat zo tijd complexiteit kan variëren van o(1) naar op) . Het wordt ten zeerste aanbevolen om in dit geval een kaart te gebruiken om te voorkomen dat u een bericht ontvangt (tijdslimiet overschreden) probleem.

Syntaxis:

 Unordered_mapumap 

Voorbeeld:

 //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<<>

Uitleg:

Deze output rechtvaardigt specifiek het feit dat de ongeordende kaarten uitvoerwaarde wordt willekeurig gegenereerd sleutel tot waarde terwijl de kaart waarde en sleutel op een geordende manier weergeeft.

Ongeordende set versus ongeordende kaart

Enkele verschillen tussen de ongeordende set en de ongeordende kaart zijn als volgt:

Ongeordende kaart

  • Alleen (sleutel waarde) paren worden gevonden in de elementen van an ongeordende kaart .
  • Gebruik de operator '[]' om de corresponderende waarde van een sleutel uit een kaart te extraheren.

Ongeordende set

    Sleutel waarde paren worden meestal gebruikt om te bepalen of een set aanwezig of afwezig is en zijn niet altijd aanwezig in een ongeordende set.
  • De ... gebruiken find()-functie , er wordt naar een element gezocht. Er is dus geen operator nodig.

Belangrijk punt:

Neem bijvoorbeeld de kwestie van het tellen van de frequentie van individuele woorden. Aangezien tellingen niet kunnen worden opgeslagen in ongeordende set (of set), we moeten in plaats daarvan een ongeordende kaart gebruiken.

Kaart versus ongeordende kaart

Enkele verschillen tussen de kaart en de ongeordende kaart zijn als volgt:

Ongeordende kaart

  • Elke volgorde kan worden gebruikt om de ongeordende kaartsleutel op te slaan.
  • De implementatie van een ongeordende kaart resulteert in een ongelijkmatige boomstructuur, waardoor het onmogelijk wordt om de volgorde van de vermeldingen te behouden.
  • Bewerkingen op een ongeordende kaart hebben doorgaans een o(1) tijdscomplexiteit .

Kaart

  • De kaart is een geordende lijst met verschillende sleutels.
  • Het is mogelijk om de volgorde van de elementen te behouden (door specifieke boombewegingen) omdat de kaart een gebalanceerde boomstructuur gebruikt.
  • De kaartbewerkingen hebben een o tijdscomplexiteit (log n) .

Procedures voor ongeordende kaart

Er zijn talloze functies die kunnen worden gebruikt met een ongeordende kaart. Degenen die het meest behulpzaam zijn:

  • Exploitant =
  • Exploitant[]
  • Begin en einde van de iterator
  • Leeg
  • Grootte van de capaciteit
  • Voor een zoekopdracht, lokaliseer en tel.
  • Invoegen en verwijderen

De volledige lijst met methoden van een ongeordende kaart wordt hieronder weergegeven:

Bij():

Deze c++ ongeordende kaartmethode geeft terug een verwijzing naar de waarde met het opgegeven element als de sleutel k .

Beginnen():

Het biedt een retourwaarde die een iterator wijst naar de eerste vermelding in de ongeordende kaartcontainer.

Einde():

De ongeordende kaartcontainerbucket retourneert een iterator wijst naar de locatie na het laatste element ().

Emmer():

Het retourneert het bucketnummer in de buckettelling van de kaart waar het element mee te maken heeft sleutel k is geplaatst.

Bucket_count()

Het totale aantal buckets van de ongeordende kaart is opgeteld met behulp van de bucket-telfunctie. Het kan worden aangeroepen zonder parameters door te geven.

Afmetingen emmer

Het geeft het aantal elementen van de ongeordende kaart voor elk emmer () .

Graaf()

Het geeft het aantal elementen van de ongeordende kaart voor elk emmer () het aantal elementen in een ongeordende kaart met het opgegeven sleutelgelijke bereik moet worden geteld.

gelijk_bereik()

Het retourneert de grenzen van een bereik met alle items van de container en een sleutel waarmee wordt vergeleken k .

Vinden()

Geeft een iterator voor het lege element.

Positie ()

Het bepaalt of de container van de ongeordende kaartcontainer leeg is.

Wissen()

Elementen in de ongeordende kaartcontainer kunnen worden verwijderd met behulp van de wissen() functie.

Hoewel de functies voor het bekijken van de interne bucketgrootte, het aantal buckets, de gebruikte hash-functie en verschillende hash-beleidsregels ook worden geleverd door de c++11 bibliotheek , zijn ze minder nuttig bij praktische toepassingen. Met behulp van de iterator kunnen we elk element in de ongeordende kaart doorlopen.

Voorbeeld:

 #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></\'>

Voorbeeld:

 // 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>