Efficient Coding/C++
-
C++ 'map.find()' 쓰는 이유Efficient Coding/C++ 2024. 9. 16. 13:13
C++에서 map에 키가 존재하는 지 확인할 때, 아래 두 코드를 볼 수 있다.map mp;// 1if (mp[a] == 0)// 2if (mp.find(a) == mp.end()) 두 코드의 차이점을 알려면 컴퓨터가 어떻게 동작하는 지를 알아야한다. map[a] vs map.find(a)1. map[a]:map에서 키 a를 찾고 그에 해당하는 값을 반환한다.만약 a가 map에 존재하지 않는 경우, a를 맵에 자동으로 삽입하고, 값은 0이나 기본값으로 초기화한다.2. map.find(a):키가 존재하면 해당 키의 이터레이터를, 존재하지 않으면 map.end()를 반환한다. 결론map[a]는 의도치 않게 키 추가가 일어나고, 이는 메모리 사용량을 증가시킨다.키의 존재 여부만 확인하고 싶을 때는 map..
-
C++ 'map' vs 'unordered_map'Efficient Coding/C++ 2024. 8. 22. 17:43
C++에서 map과 unordered_map는 둘 다 키-값 쌍을 저장하는 연관 컨테이너로, 유사한 기능을 제공하지만 내부 구현 및 성능 특성에서 큰 차이가 있다. 각각의 차이점을 아래와 같이 비교할 수 있다. map vs unordered_map1. map: 구조: Red-Black 트리와 같은 이진 탐색 트리로 구현된다.원소 순서: 키를 기준으로 정렬된 상태로 원소들이 저장된다.탐색, 삽입, 삭제 속도: 평균적으로 O(log n)의 시간 복잡도.메모리 사용량: 트리 구조를 유지하기 위해 각 노드가 추가적인 포인터(부모, 자식)를 포함하므로 메모리 사용량이 많을 수 있다.키의 비교: 기본적으로 operator범위 기반 함수 지원: lower_bound, upper_bound, equal_range와..
-
C++ 'push_back' VS 'emplack_back' 뭐가 더 빠를까?Efficient Coding/C++ 2024. 7. 6. 21:34
std::vector와 같은 컨테이너에서 emplace_back과 push_back은 요소를 추가할 때 사용된다. 둘의 차이는 주로 요소를 추가하는 방식에 있다.push_back은 요소를 복사하거나 이동하여 컨테이너에 추가한다.emplace_back은 요소를 컨테이너 내부에서 직접 생성하여 추가한다. push_back vs emplace_back 1. push_back:이미 생성된 객체를 컨테이너에 추가한다. 즉, 객체를 생성한 후 복사 또는 이동을 통해 벡터에 추가한다.std::vector vec;MyClass obj(1, 2);vec.push_back(obj); // 복사vec.push_back(std::move(obj)); // 이동 2. emplace_back:객체를 컨테이너 내부에서 직접 생성합..
-
C++에서 함수 매개변수에 const &을 왜 쓸까?Efficient Coding/C++ 2024. 6. 27. 16:21
1. const &은 왜 쓸까?설명하기에 앞서 먼저 코드를 살펴보자. 1번 코드#include #include #include using namespace std;bool compare(pair a, pair b) { return a.first > n; vector> arr; int age; string name; while (n--) { cin >> age >> name; arr.emplace_back(age, name); } stable_sort(arr.begin(), arr.end(), compare); for (auto it : arr) cout 2번 코드#include #include #include using namespace std;bool compare(const pair& a,..