[C++기초] 14. 새로 추가된 STL

INDEX

  1. 정렬안된 맵
  2. 정렬안된 셋
  3. 어레이(array)
  4. 범위 기반 for 반복문

정렬안된 맵

맵의 문제점

정렬안된 맵(unordered map)

예시 : 버킷 내용 보여주기

#include <iostream>
#include <string>
#include <unordered_map>
int main()
{
	std::unordered_map<std::string, int> scores;
	
	scores["Nana"] = 60;
	scores["MoCha"] = 70;
	scores["Coco"] = 100;
	scores["Ari"] = 400;
	scores["Chris"] = 90;
	
	for(size_t i =0; i<scores.bucket_count();++i)
	{
		std::cout << "Bucket #" << i << ": ";
		for(auto it = scores.begin(i); it != scores.end(i); ++it)
		{
			std::cout << " " << it->first << ":" <<it->second; 
		}
		std::cout << std::endl;
	}
	return 0;
}

Result

image

map vs unordered_map

stl::map stl::unordered_map
자동으로 정렬되는 컨테이너 자동으로 정렬되지 않는 컨테이너
키-값 쌍들을 저장 키-값 쌍들을 저장
이진 탐색 트리 해쉬 테이블
탐색 시간 : O(logN) 탐색시간 : O(1) ~ O(n)
상빙과 제거가 빈번하면 느림 버킷 때문에 메모리 사용량 증가

정렬안된 셋

이것도 map과 unordered_map의 차이와 같다..

어레이(array)

std::array

FixedVector vs std::array

FixedVector (FixedVector는 임의로 만든 것)

FixedVector<int, 3> numbers;

number.Add(1);
std::cout << numbers.GetSize() << std::endl; // 1
std::cout << numbers.GetCapacity() << std::endl; // 3

std::array

#include<array>
//...
std::array<int, 3> numbers;

numbers[0] = 1;
std::cout << numbers.size() << std::endl; // 3
std::cout << numbers.max_size() << stdd::endl; // 3

범위 기반 for 반복문

일반적인 반복문

for(int i =0; i<3; ++i)
for(auto it = scoreMap.begin(); it != socreMap.end(); ++it)

범위 기반 for 반복문

for(int score : scores)
for(auto& score : scoreMap)

범위 기반 for 반복

for_each()