그만큼 순서가 없는 지도 매핑된 값을 키 값과 융합하여 생성된 요소를 보유하는 관련 컨테이너입니다. 요소는 해당 항목으로 구체적으로 식별됩니다. 핵심 가치 , 그리고 매핑된 값 키와 관련된 내용입니다. 키와 값은 모두 확립된 것이거나 사용자 정의 유형 . 순서가 지정되지 않은 맵은 요소를 자체적으로 저장하는 사전 유형의 데이터 구조로 생각할 수 있습니다. 그것이 보유하는 순차 쌍 (핵심 가치) 개별 키를 사용하여 특정 요소를 빠르게 검색할 수 있습니다.
지도에 제공되는 키는 다음과 같습니다. 해시된 해시 테이블의 인덱스에 포함되므로 데이터 구조의 속도는 해시 함수에 크게 의존하지만 평균적으로 비용은 검색, 삽입, 삭제 해시 테이블의 값은 o(1)입니다.
최악의 경우, 특히 큰 소수 정수의 경우 시간 복잡도 범위는 다음과 같습니다. 오(1) 에게 에) . 이 경우 정보 수신을 방지하려면 지도를 활용하는 것이 좋습니다. (시간 제한 초과) 문제.
통사론:
Unordered_mapumap
예:
//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<<>
설명:
이 결과는 특히 다음과 같은 사실을 정당화합니다. 정렬되지 않은 지도 출력값은 무작위로 생성됩니다. 키-값 지도는 순서대로 값과 키를 표시합니다.
순서가 지정되지 않은 집합과 순서가 지정되지 않은 맵
순서가 지정되지 않은 세트와 순서가 지정되지 않은 맵의 차이점은 다음과 같습니다.
순서가 지정되지 않은 지도
- 오직 (핵심 가치) 쌍은 의 요소에서 발견됩니다. 순서가 없는 지도 .
- 연산자를 사용하세요 '[]' 지도에서 키의 해당 값을 추출합니다.
정렬되지 않은 세트
- 사용하여 찾기() 함수 , 요소가 검색됩니다. 따라서 운영자가 필요하지 않습니다.
중요한 점:
예를 들어, 개별 단어의 빈도를 계산하는 문제를 생각해 보세요. 카운트를 저장할 수 없기 때문에 순서가 지정되지 않은 세트(또는 세트), 대신 순서가 지정되지 않은 맵을 사용해야 합니다.
지도와 순서가 지정되지 않은 지도
지도와 순서가 지정되지 않은 지도의 몇 가지 차이점은 다음과 같습니다.
순서가 지정되지 않은 지도
- 순서가 지정되지 않은 맵 키를 저장하는 데는 어떤 순서든 사용될 수 있습니다.
- 정렬되지 않은 맵을 구현하면 트리 구조가 고르지 않게 되어 항목의 순서를 유지할 수 없게 됩니다.
- 순서가 지정되지 않은 맵에서의 작업은 일반적으로 o(1) 시간 복잡도 .
지도
- 맵은 고유 키의 순서가 지정된 목록입니다.
- 맵은 균형 잡힌 트리 구조를 사용하기 때문에 특정 트리 순회를 통해 요소의 순서를 유지하는 것이 가능합니다.
- 지도 작업에는 o 시간 복잡도(log n) .
순서가 지정되지 않은 지도의 절차
정렬되지 않은 맵에 사용할 수 있는 기능은 다양합니다. 가장 도움이 되는 사람들은 다음과 같습니다:
- 연산자 =
- 운영자[]
- 반복자의 시작과 끝
- 비어 있는
- 용량의 크기
- 조회하려면 찾아서 계산하세요.
- 삽입 및 삭제
순서가 지정되지 않은 맵의 메소드 전체 목록은 다음과 같습니다.
에():
이 C++ 정렬되지 않은 맵 방법 보고 지정된 요소를 포함하는 값에 대한 참조 키 k .
시작하다():
이는 반환 값을 제공합니다. 반복자 포인팅 순서가 지정되지 않은 맵 컨테이너의 첫 번째 항목으로 이동합니다.
끝():
csma와 csma CD
순서가 지정되지 않은 맵 컨테이너 버킷은 반복자 포인팅 마지막 요소() 뒤의 위치로 이동합니다.
버킷():
요소가 포함된 맵의 버킷 수에 버킷 번호를 반환합니다. 키 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 {'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></\'>
예:
// 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>
\'>