복습이 필요한 알고 팁
set을 더 잘써보자. (multiset 과 기타 잡팁들...)
헐랭미
2020. 9. 5. 23:09
programmers.co.kr/learn/courses/30/lessons/42628
이 문제를 풀다가 set에 대한 테크닉을 많이 익혔다.
기존의 Set 팁
jaeyoon8783.tistory.com/10?category=873882
Q. 기존의 set은 key값의 중복을 허용하지 않았는데 허용하는 set이 있다???????
A. multiset이라는것이 있다. 중복 허용을 제외하면 나머지는 전부 똑같다.
Q. set<int> s = {1,2,4,5,7,8} 인 상태에서 s.erase(4) 면 4번째가 아닌 숫자 4를 지웠다.
만약 0번째 원소를 지우고 싶을땐 어떻게 하나??
그면 1번째 원소는??
A. 0번째 원소는 s.erase(s.begin()) 을 하면 된다. (itr 위치류로 잡아주면 되는거였다.)
1번째 원소는 s.erase(s.begin()+1) 을 하면 될것 같지만 안된다.
=> s.erase(++s.begin()) 이렇게 써야 된다.
Q. set에 대한 탐색때 set<int>::iterator itr = s.begin() 이 너무 거추장 스럽다. 좀더 간단하게 쓸 수 있을까???
A. auto 자료형을 쓰면 된다.
밑은 코드이다.
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
|
#include <iostream>
#include <queue>
#include <set>
#define pii pair<int, int>
using namespace std;
int main()
{
ios::sync_with_stdio(false);
cin.tie(NULL); cout.tie(NULL);
set<int> s = { 6,1,8,4,2,7 }; // 1 2 4 6 7 8
s.erase(++s.begin());
auto itr = s.begin();
while (itr != s.end())
{
cout << *itr << ' ';
itr++;
}
}
|
cs |