programmers.co.kr/learn/courses/30/lessons/42628

 

 

 

코딩테스트 연습 - 이중우선순위큐

 

programmers.co.kr

이 문제를 풀다가 set에 대한 테크닉을 많이 익혔다.

 

기존의 Set 팁

 

jaeyoon8783.tistory.com/10?category=873882 

 

Set을 잘 써보자. (map 에 관한것도 조금)

set의 특징 : - 원소의 중복을 허용하지 않는다. - 원소는 오름차순으로 정렬이 되어있다. - vector, map 처럼 []를 허용하지 않는다. 첫번째와 두번째를 보자. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19..

jaeyoon8783.tistory.com

 

 

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<intint>
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

+ Recent posts