Notice
Recent Posts
Recent Comments
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 이런게4문제
- 브루트포스
- 2018
- BFS
- substr
- 시뮬레이션
- KAKAO
- 코딩스킬
- 완전탐색
- 레벨3
- 코딩테스트
- 백준
- C++
- 백트래킹
- 삼성
- 문자열
- 프로그래머스
- find
- 삼성SW테스트
- 모의SW역량테스트
- dfs
- Sort
- priority_queue
- 레벨2
- Set
- dp
- STL
- 삼성SW역량테스트
- swea
- Map
Archives
- Today
- Total
-
[C++ 코딩스킬] map, set 컨테이너 본문
C++을 활용해 삼성 SW 역량테스트 문제를 풀어보면 map이나 set은 그다지 필요가 없다.
다만 프로그래머스의 다양한 문제들을 다른 회사 대비용으로 풀다보면서 이 컨테이너들을 가끔 접하게 됐다.
사용이 미숙해 이번 기회에 자주 쓰이는 함수들을 정리해보았다.
아래의 실행 화면과 써둔 해당 라인을 같이 보면 이해가 쉽다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
|
#include <map>
#include <set>
#include <iostream>
#include <string>
using namespace std;
int main(){
map<string, int> m;
set<pair<string, int> > s;
cout << "[중요] map은 기본적으로 key, value의 개념이기 때문에 선언시 내부에 pair를 안쓴다.\n 반면, set은 키,값의 개념이 아니기 때문에 사용해야 한다.\n\n";
cout << "*** map 기본 사용 (insert, erase, find, 바로 값 넣기). key 기준으로 오름차순 정렬된다. ***\n\n";
cout << "1-1. [map의 insert 함수] => \"map.insert(요소전체)\"\n m.insert(요소전체) 또는 그 키가 없어도 m[key] = value 또는 m[key]++ (결과 1) 로 바로 삽입도 가능하다.\n\n";
m.insert(make_pair("HI", 777)); // 명시적으로 키 "HI", value 777이 들어감.
m["BIII"] = 10; // 없는 키라도 이렇게 하면 10이 들어감.
m["AAA"]++; // 없는 키라도 이렇게 하면 AAA, 1이 들어감.
cout << "key가 AAA인 요소만 값을 99999999로 변경하고 나머지 요소(BIII, 10과 HI, 777)들 출력\n-->\n";
map<string, int>::iterator it;
for (it = m.begin(); it != m.end(); it++){ // vector, queue, deque와 다르게 iterator로만 순회가 가능
if (!it->first.compare("AAA")){ // it는 포인터이기 때문에 -> 사용. 키가 "AAA"인 것을 찾으면 그 value를 변화하는 코드.
it->second = 99999999;
cout << it->first << " " << it->second << '\n'; // 변화 확인.
continue;
}
cout << it->first << " " << (it->second) << '\n'; // 나머지 출력도 동일하게.
}
cout << '\n';
cout << "m.find(\"BIII\")->first << \" \" << m.find(\"BIII\")->second 출력 결과는\n\n-->\n";
cout << m.find("BIII")->first << " " << m.find("BIII")->second << "\n\n\n"; // map 컨테이너의 find 함수는 key를 기준으로 찾는다. 반환은 map iterator 포인터형.
m.erase("BIII"); // map 컨테이너의 erase 함수는 key를 기준으로 찾는다.
// BIII키를 지운 결과 출력 -> HI, AAA 키만 출력함.
for (it = m.begin(); it != m.end(); it++){
if (!it->first.compare("AAA")){
it->second = 99999999;
cout << it->first << " " << it->second << '\n';
continue;
}
cout << it->first << " " << (it->second) << '\n';
}
cout << "\n\n\n*** set 기본 사용 (insert, erase, find). 이 역시 오름차순 정렬된다. ***";
s.insert(make_pair("Z", 3));
s.insert(make_pair("B", 3));
s.insert(make_pair("A", 3));
s.insert(make_pair("H", 3));
s.insert(make_pair("HI", 3));
s.insert(make_pair("HI", 3)); // 저장 x
s.insert(make_pair("HI", 4));
s.insert(make_pair("HI", 5));
cout << "set 전체 출력!!\n\n";
for (set<pair<string, int> >::iterator it = s.begin(); it != s.end(); it++){
cout << it->first << " " << it->second << '\n';
}
cout << "만약 못찾을 시 s.end()를 반환한다.\n";
cout << "(\"HI\", 4)를 찾아서 지워보자\n";
if (s.find(make_pair("HI", 4)) != s.end()){
cout << "--> s.end()아닌 포인터 반환! (\"HI\", 4)가 있다! 출력하면.. ";
cout << s.find(make_pair("HI", 4))->first << " " << s.find(make_pair("HI", 4))->second << '\n';
}
cout << "\n2-3. [set의 erase함수] => \"set.erase(요소전체)\"\n\"HI\", 77인 요소를 삭제하면 없으므로 아무 변화도 없고, \n\"HI\", 4인 요소를 삭제하면 있으므로 삭제된다.\n\n";
s.erase(make_pair("HI", 77));
s.erase(make_pair("HI", 4));
cout << "\"HI\", 4인 요소를 찾아 제거했으므로 find로 정말 지워졌는지 확인해보자.\n";
cout << "지워졌다면 find로 찾았을 때 s.end()가 리턴될 것이다.\n";
if (s.find(make_pair("HI", 4)) != s.end()){
cout << "--> s.end()가 아닌 포인터 리턴! 지워지지 않았습니다.\n";
}
else{
cout << "--> s.end() 리턴! 지워졌습니다.\n\n\n";
}
return 0;
}
http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4ftext-decoration:none">Colored by Color Scripter
|
http://colorscripter.com/info#e" target="_blank" style="text-decoration:none;color:white">cs |
아래의 실행화면과 함께 보자 (map은 45줄까지, set은 그 이후부터)
1. map 컨테이너
2. set 컨테이너
'7. 코딩 스킬' 카테고리의 다른 글
[C++] 공백 무시하고 문자열 뽑아내기 (0) | 2020.02.08 |
---|---|
[코딩 스킬] 유용한 팁 사이트 (0) | 2020.02.04 |
[코딩 스킬] 내 입맛에 맞게 구조체 벡터 정렬하기 + 우선순위 큐 (0) | 2020.02.04 |
[C++] 문자열함수 정리 (compare, substr, find, replace, swap) (0) | 2020.01.21 |
[코딩스킬] C++ STL - 벡터, 큐, 뎈 (0) | 2020.01.14 |
Comments