The hartă neordonată este un container asociat care conține elemente create prin fuzionarea unei valori mapate cu o valoare cheie. Elementul este identificat în mod specific prin intermediul acestuia valoare cheie , si valoare mapată este conținutul legat de cheie. Cheile și valorile pot fi ambele de orice stabilit sau tip definit de utilizator . O hartă neordonată poate fi gândită ca o structură de date de tip dicționar care stochează elemente în interiorul ei. Perechile secvențiale pe care le deține (valoare cheie) permite recuperarea rapidă a unui anumit element folosind cheia sa individuală.
Cheia furnizată hărții este hashed în indicii unui tabel hash, motiv pentru care viteza structurii de date depinde în mare măsură de funcția hash, dar, în medie, costul căutați, inserați și ștergeți din tabelul hash este o(1).
pseudocod java
În cel mai rău caz, în special pentru numerele întregi prime mari, este complexitatea timpului poate varia de la o(1) la pe) . Este foarte recomandat să utilizați o hartă în acest caz pentru a evita primirea unui text (limita de timp depășită) emisiune.
Sintaxă:
Unordered_mapumap
Exemplu:
//A c++ program to check an unordered map in it. #include #include using namespace std; int main() { unordered_mapumap; umap['javatpoint'] = 20; umap['regular'] = 30; umap['distribute'] = 40; for (auto y :umap) cout<<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'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>'[]'</strong> to extract a key'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' 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'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'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'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's element count for each <strong> <em>bucket ()</em> .</strong> </p> <p> <strong>Count()</strong> </p> <p>It gives the unordered map count'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'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's empty.</p> <p> <strong>Position ()</strong> </p> <p>It determines whether the unordered map container'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 {'one', 1}, {'two', 2}, {'three', 3} }; // here wi will insert the values by the help of the [] operator umap['the value of pi'] = 3.14; umap['the value of root2'] = 1.414; umap['the value ofroot3'] = 1.732; umap['the value oflog10'] = 2.302; umap['the value ofloge'] = 1.0; // inserting value by insert function umap.insert(make_pair('e', 2.718)); string key = 'the value of pi'; // if key not found in map iterator // to end is returned if (umap.find(key) == umap.end()) cout<< key <<' 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 &str) { unordered_mapwordfreq; stringstream ss(str); string word; while (ss>> word) wordfreq[word]++; unordered_map:: iterator q; for (q = wordfreq.begin(); q != wordfreq.end(); q++) cout<< '(' <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<<>
Explicaţie:
Această ieșire justifică în mod specific faptul că hărți neordonate valoarea de ieșire este generată în mod aleatoriu cheie-valoare în timp ce harta arată valoarea și cheia într-un mod ordonat.
Set neordonat vs Hartă neordonată
Unele diferențe între setul neordonat și harta neordonată sunt următoarele:
Hartă neordonată
- Numai (valoare cheie) perechile se găsesc în elementele unui hartă neordonată .
- Utilizați operatorul „[]” pentru a extrage valoarea corespunzătoare a unei chei dintr-o hartă.
Set necomandat
- Folosind funcția find(). , se caută un element. Astfel, nu este nevoie de un operator.
Punct important:
De exemplu, luați problema numărării frecvenței cuvintelor individuale. Din moment ce, contoarele nu pot fi stocate în set neordonat (sau set), trebuie să folosim harta neordonată.
Hartă vs. Hartă neordonată
Unele diferențe între Hartă și Harta neordonată sunt următoarele:
Hartă neordonată
- Orice comandă poate fi folosită pentru a stoca cheia de hartă neordonată.
- Implementarea hărții neordonate are ca rezultat o structură arborescentă neuniformă, ceea ce face imposibilă păstrarea ordinii intrărilor.
- Operațiile pe o hartă neordonată au de obicei un o(1) complexitatea timpului .
Hartă
- Harta este o listă ordonată de chei distincte.
- Este posibil să se păstreze ordinea elementelor (prin parcurgere specifică a arborelui) deoarece harta utilizează o structură arborescentă echilibrată.
- Operațiunile cu hărți au un o complexitate temporală (log n) .
Proceduri pentru harta neordonată
Există numeroase funcții care pot fi utilizate cu hărți neordonate. Cele mai utile sunt:
- Operator =
- Operator[]
- Începutul și sfârșitul iteratorului
- Gol
- Dimensiunea capacității
- Pentru o căutare, localizați și numărați.
- Inserați și ștergeți
Lista completă a metodelor unei hărți neordonate este prezentată mai jos:
La():
Această metodă de hărți neordonată c++ se intoarce o referință la valoarea cu elementul specificat ca cheia k .
ÎNCEPE():
Oferă o valoare de returnare care este an indicarea iteratorului la prima intrare din containerul hărții neordonate.
Sfârşit():
Bucheta de container pentru hărți neordonată returnează un indicarea iteratorului la locația de după elementul final ().
Găleată():
Returnează numărul găleții din numărul găleților de pe hărți unde elementul cu cheia k este pus.
Bucket_count()
Numărul total de găleți al hărții neordonate este numărat folosind funcția de numărare a găleților. Poate fi apelat fără a trece niciun parametru.
Dimensiunea găleții
Oferă numărul de elemente al numărului de hărți neordonate pentru fiecare găleată () .
Numara()
colecții în java
Oferă numărul de elemente al numărului de hărți neordonate pentru fiecare găleată () ar trebui să fie numărat numărul de elemente dintr-o hartă neordonată cu intervalul egal de cheie specificat.
equal_range()
Returnează limitele unui interval cu toate elementele containerului și o cheie care se compară cu k .
Găsi()
Oferă un iterator pentru elementul gol.
Poziție ()
Acesta determină dacă containerul de hartă neordonat este gol.
Şterge()
Elementele din containerul hărții neordonate pot fi șterse folosind şterge() funcţie.
Deși funcțiile pentru a vizualiza dimensiunea internă a compartimentului, numărul de compartimente, funcția hash utilizată și diverse politici de hash sunt, de asemenea, furnizate de biblioteca c++11 , sunt mai puțin utile în aplicații practice. Folosind iteratorul, putem parcurge fiecare element din harta neordonată.
Exemplu:
#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 {'one', 1}, {'two', 2}, {'three', 3} }; // here wi will insert the values by the help of the [] operator umap['the value of pi'] = 3.14; umap['the value of root2'] = 1.414; umap['the value ofroot3'] = 1.732; umap['the value oflog10'] = 2.302; umap['the value ofloge'] = 1.0; // inserting value by insert function umap.insert(make_pair('e', 2.718)); string key = 'the value of pi'; // if key not found in map iterator // to end is returned if (umap.find(key) == umap.end()) cout<< key <<\' 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 &str) { unordered_mapwordfreq; stringstream ss(str); string word; while (ss>> word) wordfreq[word]++; unordered_map:: iterator q; for (q = wordfreq.begin(); q != wordfreq.end(); q++) cout<< '(' <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></\'>
Exemplu:
// 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 &str) { unordered_mapwordfreq; stringstream ss(str); string word; while (ss>> word) wordfreq[word]++; unordered_map:: iterator q; for (q = wordfreq.begin(); q != wordfreq.end(); q++) cout<< '(' <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>
\'>