De oordnad karta är en associerad behållare som innehåller element som skapats genom att kombinera ett mappat värde med ett nyckelvärde. Elementet identifieras specifikt av dess nyckelvärde , och den kartlagt värde är innehållet relaterat till nyckeln. Nycklar och värden kan båda vara av vilken etablerad eller användardefinierad typ . En oordnad karta kan ses som en datastruktur av ordbokstyp som lagrar element inom sig själv. De sekventiella paren den innehåller (nyckelvärde) möjliggör snabb hämtning av ett specifikt element med hjälp av dess individuella nyckel.
Nyckeln som levereras till kartan är hashat in i indexen för en hashtabell, vilket är anledningen till att hastigheten på datastrukturen i hög grad beror på hashfunktionen, men i genomsnitt kostnaden för söka, infoga och ta bort från hashtabellen är o(1).
I värsta fall, särskilt för stora primtal, dess tidskomplexitet kan sträcka sig från o(1) till på) . Det rekommenderas starkt att använda en karta i detta fall för att undvika att ta emot en tl (tidsgränsen har överskridits) problem.
Syntax:
Unordered_mapumap
Exempel:
//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<<>
Förklaring:
Denna utdata motiverar specifikt det faktum att oordnade kartor utgångsvärdet genereras slumpmässigt nyckel-till-värde sätt medan kartan visar värde och nyckel på ett ordnat sätt.
Oordnad uppsättning vs Oordnad karta
Några skillnader mellan Unordered set och Unordered map är följande:
Oordnad karta
- Endast (nyckelvärde) par finns i elementen i en oordnad karta .
- Använd operatören '[]' för att extrahera en nyckels motsvarande värde från en karta.
Oordnat set
- Använda find() funktion , söks ett element efter. Det finns alltså inget behov av en operatör.
Viktig poäng:
Ta till exempel frågan om att räkna frekvensen av enskilda ord. Eftersom räkningar inte kan lagras i oordnad uppsättning (eller uppsättning), vi måste istället använda osorterad karta.
Karta kontra oordnad karta
Några skillnader mellan kartan och den oordnade kartan är följande:
Oordnad karta
- Vilken beställning som helst kan användas för att lagra den oordnade kartnyckeln.
- Implementeringen av oordnad karta resulterar i en ojämn trädstruktur, vilket gör det omöjligt att behålla ordningen på posterna.
- Operationer på en oordnad karta har vanligtvis en o(1) tidskomplexitet .
Karta
- Kartan är en ordnad lista med distinkta nycklar.
- Det är möjligt att bevara elementens ordning (genom specifik trädpassering) eftersom kartan använder en balanserad trädstruktur.
- Kartoperationerna har en o tidskomplexitet (log n) .
Rutiner för oordnad karta
Det finns många funktioner som kan användas med oordnade kartor. De som är mest användbara är:
- Operatör =
- Operatör[]
- Början och slutet av iteratorn
- Tömma
- Kapacitetens storlek
- För en uppslag, lokalisera och räkna.
- Infoga och ta bort
Den fullständiga listan över metoder för en oordnad karta visas nedan:
På():
Denna c++ oordnade kartmetod returnerar en referens till värdet med det angivna elementet som nyckel k .
Börja():
Det ger ett returvärde som är en iterator pekar till den första posten i den oordnade kartbehållaren.
Slutet():
Den oordnade kartbehållaren returnerar en iterator pekar till platsen efter det sista elementet ().
Hink():
Den returnerar bucket-numret i kartans bucket count där elementet med nyckel k är placerad.
Bucket_count()
Den oordnade kartans totala antal hinkar är räknat med funktionen för att räkna hink. Det kan anropas utan att skicka några parametrar.
Hinkstorlek
Det ger den oordnade kartantalets elementantal för varje hink () .
Räkna()
Det ger den oordnade kartantalets elementantal för varje hink () antalet element i en oordnad karta med det angivna nyckel-lika området ska räknas.
lika_intervall()
Den returnerar gränserna för ett intervall med alla behållarens föremål och en nyckel som jämförs med k .
10 1 miljoner
Hitta()
Ger en iterator till elementets tomma.
Position ()
Det avgör om den osorterade kartbehållarens behållare är tom.
Radera()
Element i den oordnade kartbehållaren kan raderas med hjälp av radera() fungera.
Även om funktionerna för att se den interna hinkstorleken, antalet bucket, använd hashfunktion och olika hashpolicyer också tillhandahålls av c++11 bibliotek , de är mindre användbara i praktiska tillämpningar. Med iterator kan vi gå igenom varje element i den oordnade kartan.
Exempel:
#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></\'>
Exempel:
// 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>
\'>