map, unordered_map 차이
1073
작성한 질문수 115
#include<iostream>
#include<map>
#include<unordered_map>
using namespace std;
map<string, int> m1;
unordered_map<string, int> m2;
int main(){
m1["3rd"] = 1;
m1["2nd"] = 2;
m1["1st"] = 3;
for(auto e : m1){
cout << e.first << ":" << e.second << "\n";
}
m2["3rd"] = 1;
m2["2nd"] = 2;
m2["1st"] = 3;
for(auto e : m2){
cout << e.first << ":" << e.second << "\n";
}
return 0;
}
위 코드의 결과는 아래와 같습니다.
//map
1st:3
2nd:2
3rd:1
//unordered_map
1st:3
2nd:2
3rd:1Q1. unordered_map의 경우 셋팅한 순서대로 출력될 것을 예상했지만 key를 기준으로 정렬된 순서대로 출력을 하고 있습니다. 제가 잘 이해를 못하고 unordered_map을 사용하고 있는 건가요?
Q2. map(unordered_map)에 추가한 여러 entry(key-value)들을 정렬조건에 맞게 출력하는 방법이 궁금합니다.
vector는 algorithm헤더의 sort함수에 커스텀cmp함수를 넣는 방식으로 잘 이해하고 있습니다.
답변 1
0
안녕하세요. ㅎㅎ
map의 경우 key를 아스키코드순으로 오름차순으로 정렬합니다.
C++ map구현체를 보면 다음과 같습니다.
template < class Key, // map::key_type
class T, // map::mapped_type
class Compare = less<Key>, // map::key_compare
class Alloc = allocator<pair<const Key,T> > // map::allocator_type
> class map;
여기서 "less<Key>"는 키를 기반으로 오름차순 정렬을 의미합니다.
참고로 이를 내림차순 정렬로 바꾸고 싶다면 다음과 같이 "greater<Key>"을 쓰면 됩니다.
#include <bits/stdc++.h>
using namespace std;
map<string, int,greater<string>> mp;
int main(){
mp["a"] = 1;
mp["b"] = 1;
mp["c"] = 1;
for(auto it : mp){
cout << it.first << " : " << it.second << '\n';
}
return 0;
}
0
정렬 방법에 대한 답변 감사합니다.
추가로, unordered_map 은 정렬을 따로 하지 않는 자료구조라고 교안에 나와있으나
질문드린 내용처럼 정렬된 결과를 출력하는 것 처럼 보입니다. 이런 현상이 나타나는 이유도 궁금합니다.
0
정렬되지 않습니다. 해당 부분 교안에 추가로 해서 업데이트 하겠습니다.
#include<bits/stdc++.h>
using namespace std;
unordered_map<string, int> umap;
int main(){
umap["bcd"] = 1;
umap["aaa"] = 1;
umap["aba"] = 1;
for(auto it : umap){
cout << it.first << " : " << it.second << '\n';
}
}
/*
정렬이 되지 않는다.
aba : 1
aaa : 1
bcd : 1
*/
1-E질문입니다!
0
516
2
3-L 틀린 부분 피드백 부탁드립니다.
0
817
2
1-A문제 순열재귀함수 질문입니다.
0
381
1
1-A 일곱난쟁이문제입니다
0
454
1
문제 풀 때 방향성에 대해
0
798
1
맥에서 vs code로 실행 관련 질문입니다
0
522
1
17071번 메모리 초과
0
386
1
1-C질문입니다!
0
418
2
2-B BFS 시간초과질문
0
629
2
1-O 13번 라인
0
440
1
6-J 놀이공원 문제 질문
0
380
1
구현관련 질문
0
482
1
강의 교안
0
318
1
실력을 더 올리고나서 강의를 보는 것이 맞을까요?
0
545
1
안녕하세요! 재귀함수에 관해서 질문드립니다
0
535
1
1-K
0
473
2
3-G번 질문있습니다.
1
473
3
3-C 실행 시간 질문드립니다.
0
493
1
4-A 문제 풀이 질문있습니다.
0
590
2
비트마스킹 연산자 "1의 보수" 영문 표기법
0
435
1
격자탐색 문제에서 BFS 시간복잡도 질문드립니다.
0
334
1
3-O go 함수 질문 드립니다.
1
446
2
4-A 출력 질문
0
303
1
1주차 1-O 질문드립니다
0
255
1





