목록게임프로그래밍 (83)
bdfgdfg
std::function std::function은 호출할 수 있는 모든 것을 Callable이라 하며, C++에서는 ()를 붙여 호출할 수 있는 모든것으로 정의한다. 위 경우 함수만을 떠올릴 수 있지만, C++에서는 Callable의 방법은 다양하다. 1 2 3 4 5 6 7 8 9 10 11 12 struct FuncObject { int operator()(int a, int b) { return a + b; } }; int main() { FuncObject a; std::cout 람다도 가능. -> C 스타일의 함수 포인터의 경우에는 함수만 저장 가능했다. 1 2 3 4 5 FuncObject a; int (*ptrFunc)(int a, int b); ptrFunc = a(20, 30); // ..
std::atmoicatomic은 원자라는 의미를 가지며 원자적 연산(더 이상 쪼개질 수 없는 연산)을 진행한다. 원자적 연산은 처리하는 중간에 다른 스레드가 끼어들 여지를 주지 않으며 전부 처리하거나 or 아무것도 하지 못했다. 이 두 가지 상황만이 존재하는 연산. 즉 한번에 일어나는 연산. d이것은 싱글 쓰레드 환경에서는 중요치 않지만, 멀티 쓰레드 환경에서는 중요한 개념. -> 둘 이상의 스레드가 공유 자원에 접근할 때 발생할 수 있는 문제를 경쟁 상태(Race condition)이라 한다. -> 경쟁 상태는 mutex와 같은 상호 배제 객체로도 해결이 가능하지만, atomic연산을 통해서도 위의 문제를 방지할 수 있다. -> 경쟁 상태가 문제가 되는 이유는 운영체제의 콘텍스트 스위칭(Context..
std::unordered_map std::unordered_map은 HashTable로 구현된 자료구조로 탐색에 걸리는 시간 복잡도는 O(1) -> 상수시간복잡도. -> 기존의 std::map은 이진 탐색 트리로 탐색의 시간 복잡도는 O(logN)의 시간 복잡도. -> std::map은 자동으로 정렬되는 컨테이너. 그렇기에 요소의 삽입/삭제가 빈번할 경우 성능이 저하된다. 이름에서 알 수 있듯이. 정렬되지 않은 맵. std::map과는 달리 자동으로 정렬되지 않기 때문. std::map과 같이 중복 키를 허용하지 않으며, key와 value의 쌍(pair)으로 요소를 저장한다는 공통점이 존재. -> 다른 점은 내부 구현된 자료구조가 다르며, 요소는 key값을 통해 해시 함수가 생성하는 index기반의 ..
std::multimap std::multimap은 연관 컨테이너이며 기본적으로 map과 동일하다. 단 std::map과는 달리 중복키를 허용한다. std::map에서는 insert를 통해 중복된키에 해당하는 요소를 삽입하면 삽입되지 않으며, operator[]연산자를 이용해도 중복키에 해당하는 요소가 이미 존재한다면 값을 덮어씌운다. std::multimap은 insert를 할 때 키가 이미 존재해도 중복키를 허용하기에 데이터를 저장한다. 그 외에는 map과 동일하기에 설명할게 없다. 먼저 std::multimap을 사용하기 위해서는 헤더파일을 추가해야 한다. 기본적인 생성 방법 1 2 3 4 // 기본 생성 방식 std::multimap mMap; // 복사 생성자 지원 std::multimap mM..