Notice
Recent Posts
Recent Comments
Link
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
Tags
more
Archives
Today
Total
관리 메뉴

승쨩개발공부

[STL] map 본문

STL

[STL] map

Unknowns 2021. 12. 13. 16:01

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