실전압축 STL
번외: FastIO
1
#define FastIO ios::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);
vector
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
// 생성
vector<int> v; // int type vector 생성
vector<int> v(N); // N개의 크기를 가지는 vector 생성
vector<int> v(N, E); // N개의 크기를 가지고 E로 초기화 된 vector 생성
// 참조
v[idx] // idx번째 원소 참조
v.front() // vector의 첫 번째 원소 참조
v.back() // vector의 마지막 원소 참조
// 삽입
v.push_back(E); // vector의 가장 뒤에 원소 추가
v[idx] = E; // vector의 idx 위치에 원소 삽입
// 삭제
v.pop_back() // vector의 마지막 원소 삭제
v.clear() // vector의 모든 원소 제거
// 기타 연산
v.size() // vector의 원소 개수 반환
v.resize(N) // vector의 size를 N으로 재설정
// iterator를 통한 vector 순회
vector<int>::iterator it = v.begin();
while(it != v.end()) {
cout << *it++;
}
// vector 내부의 중복 원소 삭제
v.sort(v.begin(), v.end());
v.erase(unique(v.begin(), v.end()), v.end());
stack
1
2
3
4
5
6
stack<int> s; // 스택 생성
s.push(E); // 스택의 맨 위에 원소 삽입
s.pop(); // 스택의 맨 위의 원소 삭제
s.top(); // 스택의 맨 위의 원소 return
s.size(); // 스택의 원소의 개수 return
s.empty(); // 스택이 비어있으면 true, 아니면 false return
queue
1
2
3
4
5
6
queue<int> q; // 큐 생성
q.push(E); // 큐의 맨 뒤에 원소 삽입
q.pop(); // 큐의 맨 앞의 원소 삭제
q.front(); // 큐의 맨 앞의 원소 return
q.size(); // 큐의 원소의 개수 return
q.empty(); // 큐가 비어있으면 true, 아니면 false return
deque
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
// 생성
deque<int> dq; // int type deque 생성
// 참조
dq.at(idx); // idx번째 원소 참조
dq[idx]; // idx번째 원소 참조
dq.front(); // deque의 첫 번째 원소 참조
dq.back();// deque의 마지막 원소 참조
// 삽입
dq.push_back(E); // deque의 맨 뒤에 원소 추가
dq.push_front(E); // deque의 맨 앞에 원소 추가
dq[idx] = E; // deque의 idx 위치에 원소 삽입
// 삭제
dq.pop_back(); // deque의 맨 뒤의 원소 추가
dq.pop_front(); // deque의 맨 앞의 원소 추가
dq.clear(); // deque의 모든 원소 제거
// 기타 연산
dq.size(); // deque의 원소 개수 return
dq.empty(); // deque가 비어있으면 true, 아니면 false return
priority queue
1
2
3
4
5
6
7
8
9
10
11
12
13
14
// 생성
priority_queue<int> pq; // priority queue 생성(최대 힙)
priority_queue<int, vector<int>, greater<int>> pq; // priority queue 생성(최소 힙)
// 삽입
pq.push(E); // priority queue에 원소 추가
// 삭제
pq.pop(); // priority queue의 원소 제거
// 기타 연산
pq.top(); // priority queue의 맨 앞의 원소 return
pq.size(); // priority queue의 원소 개수 retuern
pq.empty(); // priority queue가 비어있으면 true, 아니면 false return
pair
1
2
3
pair<int, int> pi = make_pair(E1, E2); // pair 생성
pi.first; // pair의 첫 번째 원소 return
pi.second; // pair의 두 번째 원소 return
tuple
1
2
3
4
tuple<int, int, int> tp = make_tuple(E1, E2, E3); // tuple 생성
get<0>(tp); // tuple의 첫 번째 원소 return
get<1>(tp); // tuple의 두 번째 원소 return
get<2>(tp); // tuple의 세 번째 원소 return
map
1
2
3
4
5
6
7
8
9
10
11
12
// 생성
map<string, int> m; // map 생성
// 삽입
m.insert(make_pair(key, value)); // {key, value}인 pair 삽입
m[key] = value; // 위와 같음
// 참조
m[key]; // {key, value}에서 value return
// 삭제
m.erase(key); // {key, value} 삭제
set
1
2
3
4
5
6
7
8
9
10
11
12
13
// 생성
set<int> s; // set 생성(오름차순)
set<int, greater<int>> s; // set 생성(내림차순)
// 삽입
s.insert(E); // E 삽입
// 참조
s.find(E); // E가 있으면 iterator 형식으로 return. 없다면 end() return
// 삭제
s.erase(E); // E 삭제
binary_search
1
2
3
4
5
6
7
// vector initialization
vector<int> v;
// ...
v.sort();
// vector initialization
binary_search(v.begin(), v.end(), E); // vector에 E가 존재하면 true, 아니면 false return.
lower_bound
1
2
3
4
5
6
7
8
// vector initialization
vector<int> v;
// ...
v.sort();
// vector initialization
lower_bound(v.begin(), v.end(), E); // vector에 E와 같거나 큰 첫 번째 원소의 iterator return
lower_bound(v.begin(), v.end(), E) - v.begin(); // index로 변환
upper_bound
1
2
3
4
5
6
7
8
// vector initialization
vector<int> v;
// ...
v.sort();
// vector initialization
upper_bound(v.begin(), v.end(), E); // vector에 E보다 큰 첫 번째 원소의 iterator return
upper_bound(v.begin(), v.end(), E) - v.begin(); // index로 변환
This post is licensed under CC BY 4.0 by the author.