자료구조 관련 함수 + 문자열 + Algorithm.h 함수
목적에 따른 자료구조의 사용 구분
https://indirect91.tistory.com/27
먼저 가장 위의
Stack / Queue / Priority_Queue
3개는 모두 순서가 중요한 정보의 저장에 쓰이는 자료구조이다.
왼쪽 아래의
List / Vector / Deque 를 본다.
이 3개의 공통점은 못찾겠다.
오른쪽 아래의
Map / Set / Multi_Map / Multi_Set / Unordered_Map
Map/Set 은 중복이 기본적으로 되지 않는 자료구조이지만,
Multi-를 붙이면 중복도 허용하는 것 같다.
참고한 사이트
값만 넣을 수 있다. Clear가 없다. empty는 당연히 end와 비교
#include <stack>
push / pop / (top)
- stack의 top에 추가/삭제/확인
size / empty
- stack의 크기/비어있는지
#include <queue>
push / pop / (front/back)
- stack의 top 대신에 front/back이 존재
- 각각 (맨 앞의 값 / 맨 마지막 값)을 확인
size / empty
- stack의 크기/비어있는지
#include <queue>
priority_queue<int> pq;
Stack과 같음.
이름은 Queue이지만, top만을 사용.
(들어간 순서가 의미없기 떄문)
top은 참고로 front를 의미, 우선순위가 가장 큰 값.
Sequence Container?
#include <list>
push_front / push_back / insert
- 맨 앞 / 맨 뒤 / 특정 인덱스에 넣을 수 있다.
pop_front / pop_back / erase
- 같은 매커니즘
(front/back)
size / empty / clear
#include <vector>
vector<int> vec3(vec1.begin(), vec1.end());
push_back / pop_back / (front/back)
insert / erase
- 특정 인덱스에 값을 삽입, 삭제
erase(v.begin()+2) = 3번째 원소가 삭제size / empty / clear
MyVector[1]
- 인덱스로 바로 접근 가능
vector<vector<int>> v
- 2차원 벡터 가능.
#include <deque>
기본적으로 Vector와 같다.
- push_front / pop_front
- 이것만 추가됨.
Associative Container?
#include <map>
insert / erase
- 맨뒤나 앞에 넣는 개념은 아니므로 insert나 erase 사용
(push / pop 대신)- insert는 pair형태로 넣어야만 함
find
- key값에 해당하는 반복자 리턴.
- 사실 반복자가 의미가 없으므로, 해당 key값이 존재하는지
파악만하는 용도로 보임.size / empty / clear
- 추가로 first, second로 각 pair에 접근.
#include <set>
key를 사용하지는 않지만 Map과 같다.
#include <map>
/ #include <set>
count
- key 값에 해당하는 원소들의 개수 리턴
- 사실 일반 Map에서도 사용할 수 있지만, 의미가 없었다.
#include <unordered_set>
/ #include <unordered_map>
#include <algorithm>
정말 여러가지 기능들이 존재하지만,
많이 사용했거나, 사용할 것 같은 것들 위주로만 적는다.
sort(myVector.begin(), myVector.end());
std::sort(s.begin(), s.end(), std::greater<int>());
reverse(str.begin(), str.end());
liter = lower_bound(myVector.begin(), myVector.end(), 값);
반드시 2개끼리만 비교가능.
max_element / min_element
std::max_element(numbers.begin(), numbers.end());
해당 범위 내에 max인 위치를 반환.
따라서 값에 접근하기 위해선 *를 붙여야 함.
fill(v.begin(), v.end(), 0);
copy(&map[0][0], &map[0][0] + 81, &tmp[0][0]); // 복사
copy(&map[0][0], &map[0][0] + 81, &tmp[0][0]); // 복사
정리된 사이트