[Rust] 자료구조 타입들

Vec만 빼고 다 std::collections 모듈에 존재한다.


벡터
길이가 변경되는 동적배열이다.
std::vec 모듈에 존재한다.

길이의 증가나 감소는 맨 뒤에서만 발생한다. 아래는 그 예다. image

image push로 집어넣은 값은 맨 뒤에서부터 쌓임을 볼 수 있다.

근데 집어넣을 값이 여러개인데 자꾸 저렇게 하나하나 push를 해주는건 아무래도 좀 불편하다.
러스트는 이를 위한 매크로 vec!을 제공한다. image

image 너무 간결해졌다.

당연히 인덱싱도 되고 image

image

정렬도 잘 된다. image

image 그렇다.


디큐
c++ stl의 deque에 대응되는것같다.
앞뒤로 즉시삽입이 되면서 인덱싱도 가능하다.
하지만 마찬가지로 쓸일은 별로 없을 것이다. image

image


이진 힙
벡터 기반의 힙이다.
그리고 최대 힙이다..

아래는 간단한 예시다.
push는 집어넣고, pop은 최대값을 뽑아서 옵션으로 반환한다.
peek는 최대값을 보기만 한다. image

image

벡터와의 연동도 잘 되어있다. image

image

힙정렬을 수행한 후 벡터로 반환할 수도 있다. image

image


연결리스트
삽입삭제병합만 빠르고 접근은 느린 그 구조다.
안정적이긴 한데 막상 쓸일은 별로 없다.

간단한 사용례다. 앞뒤로 삽입만 했다. image

image


트리셋
B트리 구조의 집합이다. 다른 언어들에선 보통 RB트리를 쓰는데 희한하게도 혼자 B트리를 주장한다.

쓸일은 별로 없다고 봐도 된다. image

image 찾아보면 집합연산도 있고 한데 뭐 그렇다.


트리맵
트리셋과 같은 B트리 기반이지만, 키와 값의 쌍으로 구성된다. image

image

인덱싱이 되긴 하는데 읽기전용이다. image

image 그렇다.


해시셋
트리셋과 비슷하게 집합을 표현하지만. B트리 대신 해시테이블로 유지한다는게 다르다. image

image 순서가 지멋대로 나온다.


해시맵
트리셋과 비슷하게 키와 값의 쌍으로 표현하지만, 트리 대신에 해시테이블을 쓴다. image

image 그렇다.


참조
https://doc.rust-lang.org/std/collections/index.html