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
- 삼성 코딩테스트
- multiset
- 생활코딩
- 언어의 온도
- 외판원 순회
- 이분탐색
- 다이나믹 프로그래밍
- 캘리그라피
- 성화봉송주자
- yolo
- MST
- 다음 지도 api
- 비트마스크
- 성화봉송
- Segment Tree
- 그리디 알고리즘
- 위상정렬
- 영어회화 100일의 기적
- 백트레킹
- upper_bound
- 다음 API
- 평창동계올림픽
- BFS
- DP
- boj
- 인간이 그리는 무늬
- lower_bound
- 창훈쓰다
- 안드로이드 스튜디오
- BOJ 2098
Archives
- Today
- Total
Hoon222y
Set & MultiSet 본문
이번 시간에는 Set 과 MultiSet 에 대해 알아보도록 하겠다.
Set과 Multiset을 사용하는 가장 큰 이유는 Binary Tree로 구현되어 있기 때문에, Search를 O(logN)에 할 수 있다는 이유로 사용을 하게 된다.하지만 차이점은 Set은 중복을 허용하지 않고 , Multiset은 중복을 허용하기 때문에 중복시 MultiSet 을 통해 구현해야 한다.
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 | #include <iostream> #include <cstdio> #include <set> using namespace std; set<int> s; int main(){ s.insert(10); s.insert(20); s.insert(5); s.insert(7); auto it = s.begin(); for(int i=0;i<4;i++){ cout << *it <<" "; it++; }cout <<endl; s.erase(10); it = s.begin(); for(int i=0;i<3;i++){ cout << *it <<" "; it++; }cout <<endl; it= s.find(8); cout << *it <<endl; return 0; } | cs |
위와같이 insert,erase 등이 간단하고 삽입 시 자동으로 정렬이 되서 아주 편하다 보통 set이나 Multiset을 쓸 때는 lower_bound 등과 함께 쓰는거 같다
1 2 3 4 5 6 7 | for (int i=0; i<n; i++) { auto it = s.lower_bound(v[i].second); if (it != s.end()) { ans += (-v[i].first); s.erase(it); } } | cs |
이런식으로 말이다
추가적으로 STL 기능을 알아보려면
http://blog.naver.com/warchife/220921678115
http://blog.daum.net/coolprogramming/82 를 참고하면 좋을것 같다.
'코딩 > 자료구조&알고리즘' 카테고리의 다른 글
다익스트라(Dijkstra) 알고리즘 - 최단거리 (0) | 2017.03.29 |
---|---|
MST - 프림(Prim), 크루스칼(Kruskal) 알고리즘 (0) | 2017.03.21 |
LIS(Longest Increasing Subsequence) - 최장 증가 수열 (1) | 2017.03.06 |
위상정렬(Topolosical Sort) (0) | 2017.02.24 |
segment tree(2) - 이분탐색 (0) | 2016.09.20 |
Comments