Post

실전압축 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 삭제


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.