cpp STL 등 자주 사용하는 것들 정리

2 minute read

Vector

#include <vector>

vector<int> v; //선언
vector<vector<bool>> v2 = vector<vector<bool>>(m, vector<int>(n, false>)); //2차원 벡터 선언


v.assign(10, 1) // 10개의 원소를 1로 할당
v.assign(tmp.begin(), tmp.emd()) // tmp 원소로 할당

v[0], v.at(0) // 인덱스 접근

v.front(), v.back() // 첫 번째, 마지막 원소 참조

v.push_back(5) // 맨뒤에 5 삽입

v.pop_back() // 마지막 원소 제거

v.begin(), v.end() // iterator에서 사용 [)

v.size() // 원소 갯수 출력

v.capacity() // "할당된" 크기 출력

v.insert(1,10) // 1번째 자리에 10 삽입

v.empty() // v.size()가 0인 경우 true

String

#include <string>

string str1, str2;
str1 = "str1";
str2 = str1; // deep copy

str1.compare(b); // 0인 경우 두 문자열이 같음

str1.find("st"); // "st"가 발견된 첫 위치 반환, 없는 경우 string::npos

stoi("1") // string to integer

str1.push_back("x") // 마지막에 "x" 추가

str1.pop_back() // 마지막 문자 삭제

str1.length(), str1.size() // 스트링 길이 반환 

stoi("1") // string to integer 
to_string(1) // integer to string

str1.substr(pos, count) // [pos, pos + count) 만큼 반환, 문자열보다 긴 경우 끝 까지 리턴 

str1.front()
str1.back()

Pair

#include <utility>

pair<int, int> p1 = make_pair(1, 2) 
pair<int, int> p2 = { 1, 2 } 

p1.first // 첫 번째 인자
p2.second // 두 번째 인자

// 백터에 넣어서 정렬 시, first 기준 정렬, 같은 경우 second 이용해 정렬

Algorithm

#include <algorithm>

vector<int> v; // v값이 채워져 있다고 가정

sort(v.begin(), v.end()) // [ v.begin(), v.end() ) 오름차순으로 정렬, 큌솔트 사용해서 stable 보장 x
sort(v.begin(), v.end(), greater<int>()) // [ v.begin(), v.end() )  내림차순으로 정렬
sort(v.begin(), v.end(), compare) //bool compare(int a, int b) 커스텀 compare

stable_sort() // sort()와 동일하게 사용, stable이 보장된다. (동일한 정렬 기준을 가진 순서가 정렬 이후에도 유지된다) - 머지솔트 사용해서


find(v.begin(), v.end(), 3) // vector에 3의 위치 찾아서 반환, 없을 시 v.end() 

reverse(v.begin(), v.end());

min(1, 2) // 1 반환
max(1, 2) // 2 반환

*max_element(v.begin(), v.end()); // 최대값
*min_element(v.begin(), v.end()); // 최소값

bool next_permutation (v.begin(), v.end());

Stack

#include <stack>

stack<int> s;

s.push(1) // top에 1 추가

s.pop() // top에 있는 원소 삭제

s.top() // top에 있는 원소 반환

s.empty()

s.size()

Map

  • Red-Block 트리로 구현
  • unordered_map : 해시 테이블로 구현 (사용법은 동일)
#include <map>

map<string, int> m; // key : string, value : int 형태로 선언

m.insert({"key", value})
m.insert(make_pair("key", value)}
m["key"] = value // map의 element 추가

m.erase("key")   // "key"에 해당하는 원소 삭제

m.clear() // 모든 원소 삭제

m.find("key") // "key"에 해당하는 iterator 반환

m.count("key") // 존재 : 1, 존재 x : 0

m["idx"] // value 반환

m.empty() // 비어있으면 true

m.size() // 원소 개수


// 순회
map<string, int>::iterator it;
for(it = m.begin(); it != m.end(); it++) {
    cout<< it->first << ' ' << it->second; 
}


Queue

#include <queue>

queue<int> q;

q.push(1);
q.pop();

q.front();
q.end();

q.size();

q.empty();

Set

  • 오름차순으로 자동 정렬 (inorder traversal)
  • key만 저장한다고 생각
#include <set>

set<int> s;

s.insert(3);

s.empty();

s.size();

s.find(3);

s.clear();

Priority Queue

#include <queue>

struct compare {
    bool operator()(int a, int b) {
        // 비교방식;
    }
};

priority_queue<int, vector<int>, less<int> > pq; // Max Heap
priority_queue< int, vector<int>, greater<int>> pq2; // Min Heap
priority_queue< int, vector<int>,  compare> pq3; // 커스텀 힙


pq.push(5); 
pq.pop();

pq.top();

pq.empty();

pq.size();

Categories:

Updated: