[C++ 문법 정리] 코딩테스트 대비

하스레·2023년 2월 28일
0

C++ 문법 정리

목록 보기
2/2

vector

  • 특정 원소 지우기
    v.erase(remove(v.begin(), v.end(), 지우고 싶은 원소), v.end());

priority_queue

#include <queue>
#include <vector>

struct pq_cmp{
    bool operator()(pair<int, int>&a, pair<int, int>&b) {
        if (a.first == b.first) {
            return a.second > b.second;
        }
        else {
            return a.first < b.first;
        }
    }
};

priority_queue<pair<int, int>, vector<pair<int, int>>, pq_cmp> pq;

if(!pq.empty()) {
  pair<int, int> max_val = pq.top();
  pq.pop();
}

unordered_map

#include <unordered_map>

unordered_map<string, int> m;

for(int i =0; i<임의배열.size(); i++) {
	m[임의배열[i]]++;
}
  • unordered_map vector변환하여 value 값 기준 정렬하기
bool cmp(pair<string, int>& a, pair<string, int>& b)
{
    return a.second > b.second;
}

unordered_map<string, int> m;

vector<pair<string, int>> v(m.begin(), m.end()); 
sort(v.begin(), v.end(), cmp);
  • map<string, int> m; :중복x, #include <map>
  • set s; //중복x, 키와 값이 똑같은 map이라 보면 됨, include <set>
  • multimap<string, int> mm; //중복o map, include <map>

max_element(), min_element(): 랜덤 접근 가능한 리스트에서 사용 가능

iterator 반환하므로, 값 참조시 * 붙이기

cout << "max값: " << *max_element(arr, arr+size) << endl;
cout << "min값: " << *min_element(arr, arr+size) << endl;
  
cout << "max값: " << *max_element(v.begin(), v.end()) << endl;
cout << "min값: " << *min_element(v.begin(), v.end()) << endl;

배열의 사이즈

  • 배열의 사이즈는 size()를 사용하지 않음
  • 배열의 사이즈 구하기: sizeof(arr)/sizeof(int)

String -> Int

  • string::stoi(str)
  • 주의!!! str == "" 일 시 stoi(str) 사용하면 core dump 남!!!!!

String 정렬

  • 오름차순: std::sort(str.begin(), str.end())
  • 내림차순: std::sort(str.begin(), str.end(), std::greater<>())

INT_MAX

  • #include <climit>

절댓값 abs()

  • 정수: #include <cstdlib>
  • 실수: #include <cmath>

auto, auto&

  • for(auto next: adj[root]) 해도 되는데 &붙이는 이유는, 밑 코드에선 괜찮은데 원본이 아니라 복사가 일어나기 때문!
    void dfs(int root) {
      visited[root] = true;
      cnt ++;
      
      for(auto &next: adj[root]) {
          if(visited[next]) continue;
          dfs(next);
      }

기타

  • 완탐 혹은 재귀 사용시, 메인에서 반복문 돌면서 재귀 호출해야되는지 생각하기

  • 최단거리는 항상 bfs 생각

  • size() 함수의 반환값은 unsigned long

    int n = nums.size();
    
    min_ = min(n, s.size());
    //이렇게 하면 n은 int 고 s.size()는 unsigned long 이라 에러남
    
    //방법1
    min_ = min(nums.size(), s.size());
    
    //방법2
    int n = nums.size();
    int ss = s.size();
    min_ = min(n, ss);
    
    //이렇게 타입 맞춰줘야함

sort()에서 비교함수 사용시 유의

  • #include <algorithm>
  • sort안에 비교함수 넣을 때는, 괄호 떼고 넣어야함. 밑의 cmp처럼!
sort(v.begin(), v.end(), cmp);
profile
Software Developer

0개의 댓글