승쨩개발공부
[STL] map 본문
map
-> map의 원소는 key와 value를 한 쌍으로 가진다.
-> 각 원소들은 삽입 시에 key값에 따라 자동 정렬이 발생한다.(순회 가능)
-> 노드 기반 컨테이너들 중 유일하게 key값을 통한 임의 접근이 가능하다.
-> 리소스 탐색용으로 많이 사용된다.
-> 단, 중복된 key값은 허용하지 않는다.
map 선언
map 사용
-> map은 key와 value를 한 쌍으로 가진 컨테이너이다.
-> key로 사용할 자료형과 value로 사용할 자료형을 <>안에 명시해주면 된다.
-> 명시한 순서대로 key와 value의 타입이 결정된다.
map의 원소 삽입
map은 원소 삽입 시 key 값에 따라 자동 정렬이 발생한다.
-> 자동 정렬이 발생하기 떄문에 앞,뒤 원소 삽입의 의미가 없으므로 push 함수를 지원하지 않는다.
map의 원소
key와 value 한 쌍을 이룬다.
어떤 식으로 한 쌍으로 만들까?
-> 구조체
pair객체(구조체)
map은 원소로 객체를 가진다.
구조체이기에 읽기/쓰기가 가능하다.
map의 원소 삽입 방법
#.1 pair 구조체
#2. make_pair()
-> 인자로 2가지 정보를 받아 첫 번쨰 인자는 key값으로, 두 번쨰 인자는 value값으로 만든 pair를 반환
#3. value_type
map 컨테이너 내부에 정의되어 있는 pair 구조체.
map의 key는 상수로 결정된다.
-> 내부에 있는 value_type의 first 또한 상수가 된다.
#4. emplace()
모든 컨테이너의 삽입 함수의 이름을 획일화 시킨 것.
단, key로 설정한 자료형과 삽입하는 key값의 자료형을 동일하게 설정해야한다.
단, value로 설정한 자료형과 삽입하는 value값의 자료형을 동일하게 설정해야한다.
#5. 유니폼 초기화
-> {}를 사용
-> 모든 초기화를 획일화 시킨 것.
#6. [] 인덱스
-> []를 사용
insert와 []의 차이점
1.insert
중복 key 값이 없을 경우 삽입
중복 key 값이 있을 경우 무시
2.[]
중복 key 값이 없을 경우 삽입
중복 key 값이 있을 경우 value를 수정
map의 원소 삽입 정리
map 컨테이너 반복자
-> 양 방향 접근 반복자를 사용한다
map 중간 삽입
map은 원소 삽입 시 자동 정렬이 발생한다.
-> 중간 삽입의 의미가 하나도 없다.
map의 중간 삭제
map의 원소 탐색
[]를 통해 탐색을 수행할 떄 key값이 없을 경우 원소를 삽입해버린다.
-> 의도하지 않은 원소 삽입이 발생한다.
find() 멤버 함수
탐색에 성공할 경우 해당 위치를 가리키는 반복자를 반환
탐색에 실패할 경우 end를 반환
find의 문제점
-> find함수는 단순 비교이다
-> map 컨테이너에 저장하는 key값은 Data 영역의 주소이다.
-> 하지만, find를 이용해서 탐색하는 값은 stack 영역의 주소이다.
-> 즉, 문자열을 비교하는 것이 아니라 단순 주소를 비교하고 있는 것이다.
알고리즘 함수 find_if()
find_if 조건자는 단항 조건자를 사용한다.
-> 컨테이너를 순회하면서 원소를 조건자의 매개변수로 전달한다.
-> ??? 비교할 값은 언제 전달할까?
이를 해결하기 위해 조건자는 함수 객체로 만든다.
'STL' 카테고리의 다른 글
[STL] vector push_back/emplace_back (0) | 2021.12.13 |
---|---|
[STL] list (0) | 2021.12.10 |
[STL] vector의 메모리정책, 생성자, reserve (0) | 2021.12.08 |
[STL] 조건자 (algorithm) (0) | 2021.12.08 |
[STL] 반복자 (iterator) (0) | 2021.12.08 |