STL(3)

Hi Beck·2023년 7월 28일

STL

목록 보기
3/3

set이란 무엇인가?

1.set
집합이란 개념을 코드로 구현한게 set이다.
수학에서의 집합처럼 얘도 데이터(값,변수)를 넣으면 뭘 넣던 자동으로 정렬해서 집합을 만들어준다.

a.첫번째 특징
백터같은 경우는 푸시백을 쓰면 넣은 값들이 넣은순서대로 그대로 출력되는데
셋은 값들을 넣으면 그걸 다시 어떤 기준으로 정렬시켜준다.

  • 정렬이 돼서 좋은점 : 탐색이 빨라진다.
    백터에서는 원소가 정렬이 안되어있으니 특정 숫자를 찾으면 배열을 다 뒤져야된다.
    근데 셋은 정중앙의 원소부터 왼쪽 오른쪽 중 왼쪽부터 보고 또 그 왼쪽의 왼쪽이 있다면 그 왼쪽부터 오른쪽순으로 본다.오른쪽에 값이 없을때 끝난다.
    (자료구조의 트리 공부하기)

내가 특정값을 찾으면 반을 나눠 나보다 작으면 왼쪽 크면 오른쪽하는식으로 효율적으로 하는것

b.두번째 특징
중복되는 값을 허용하지않는다.(넣으면 생략해버림)
== Key값과 Value값이라는 개념이 있어야 이해 가능
Key값 : 중복되지않는 값
Key값이 존재한다 == 원소들이 다 key값이다.

  • 백터는 값이 중복될 수 있다.

c. set의 단점
트리구조로 데이터를 넣어서 관리하다보니 데이터 하나 넣을때 시간이 걸린다.
또한 삭제할때도 시간이 걸린다.
(깊게 이게 어떻게 구현된것까지는 알필요없고 사용법과 이런 이슈가 있단것만 기억하자)

2.set의 사용법
백터처럼 선언하고 클래스 템플릿안에 있는 set 멤버함수 갖다가 사용하면된다.

set s; //기본 선언방법

  • set은 푸시백이 없다.(뒤에 넣어줄 필요가 없는게 넣을때마다 정렬해버리니깐)

3.set의 멤버함수들
insert
erase
begin, end
rbegin, rend

map이란 무엇인가?

set하고 거의 동일한데 차이점이 아래와 같이 하나있다.
map도 key값이 있고, 자동정렬되며 사용법도 동일하다.
셋은 키값과 밸류값을 따로 저장하는데 맵은 키값과 밸류값을 묶어서 저장한다.
(==키에 해당하는 밸류값을 추가로 저장할 수 있다.)
예로 들어 주민번호라는 키값을 두고 우리가 그 외 정보가 필요할때 그 외 정보를 밸류값으로 두면 그 부가정보들을 밸류값들로 잡아 중복안되는 키값과 묶어줄 수 있음

민원 정보 조회시 주민번호 치면 다나오는것이 map이다.다만 인서트할때 추가로 밸류값을 넣어줘야된다.

profile
Emotional realizer

0개의 댓글