map

#include <map>
using namespace std;

public void iterator()
{
	// list와 동일
}

public void initialize()
{
	/*
	 * 기본적으로 key값 기준 오름차순으로 정렬된다.
	 * map<key자료형, value자료형, greater<key자료형>> 이렇게 선언하면
	 * key값 기준 내림차순으로 정렬된다.
	 */
	map<key자료형, value자료형> 변수명; // 빈 map 선언
	map<key자료형, value자료형> 변수명 = { { key값, value값 }, { k, v }, ... }
	map<key자료형, value자료형> 변수명 = 
		{ make_pair(key값, value값), make_pair(key, value), ... }
	map<key자료형, value자료형> 변수명(다른 map변수);
	// 시퀀스 컨테이너처럼 디폴트 값으로 초기화할 수 없다
}

public void copy()
{
	// list와 동일
}

public void insert()
{
	map<string, int> a;
	a.insert({ "a", 1 });
	a.insert(make_pair("b", 2));
	a["c"] = 3; // 만일 "c"란 key가 이미 존재할 경우 짝이 되는 value를 3으로 업데이트
}

public void erase()
{
	map<string, int> a = { { "a", 1 }, { "b", 2 } };
	a.erase(a.begin() + 1);
	a.erase(a.find("b"));
	a.erase("b"); // 모두 동일한 데이터 삭제함
	a.clear();
}

public void size()
{
	// vector와 동일
}

public void search()
{
	/* 
	 * front, end 같은 함수가 없어서 모든 원소를 탐색해서 찾아야함
	 * 1. iterator로 선형탐색해서 찾거나
	 * 2. find() 함수로 찾기(key값에 대응하는 value를 알고 있을 경우)
	 */
	map<string, int> a = { { "a", 1 }, { "b", 2 } };
	a.find("a")->second; // 1 (->first로 하면 "a"가 나옴)
	auto aa = a.find("a"); // iterator로 받을 수 있음
}

public void contains()
{
	map<string, int> a;
	if (a.find(key값) == a.end())
	{
		// a가 해당 key를 갖고 있지 않음
	}
}

public void swap()
{
	// vector와 동일
}

set

#include <set>
using namespace std;

public void iterator()
{
	// list와 동일
}

public void initialize()
{
	// 시퀀스 컨테이너처럼 디폴트 값으로 초기화할 수 없다
	// 중복값이 들어오면 알아서 최초 한번만 insert한다.
	// 위 사항을 제외하고는 list와 동일

	/*
	 * 기본적으로 key값 기준 오름차순으로 정렬된다.
	 * set<key자료형, value자료형, greater<key자료형>> 이렇게 선언하면
	 * key값 기준 내림차순으로 정렬된다.
	 */
}

public void copy()
{
	// list와 동일
}

public void insert()
{
	set<int> a;
	a.insert(2);
}

public void erase()
{
	set<int> a = { 2, 3, 4 };
	a.erase(a.begin() + 1); 
	a.erase(a.find(2)); 
	a.erase(2); // 모두 동일한 데이터 삭제함
	a.clear();
}

public void update()
{
	// erase한 후에 insert하는 것으로 해야 함 
}

public void size()
{
	// vector와 동일
}

public void search()
{
	/* 
	 * front, end 같은 함수가 없어서 모든 원소를 탐색해서 찾아야함
	 * 1. iterator로 선형탐색해서 찾거나
	 * 2. find() 함수로 찾기(key값에 대응하는 value를 알고 있을 경우)
	 */
	set<int> a = { 1, 2, 3 };
	int num = *a.find(3); // 3
	auto aa = a.find(3); // iterator로 받을 수 있음
}

public void contains()
{
	// map과 동일
}

public void swap()
{
	// vector와 동일
}

multimap

#include <map>

public void insert()
{
	multimap<string, int> a;
	a["aa"] = 2; // map과 달리 이런 방식의 insert가 안된다.
	a.insert(make_pair("aa", 2)); // 무조건 이렇게만 insert 가능
}

public void update()
{
	multimap<string, int> a;
	a.insert(make_pair("aa", 2));
	// { "aa" : 2 } 를 { "aa" : 3 } 으로 바꾸고 싶을 경우
	a.find("aa")->second = 3; 
	// 이렇게 하면 된다. a["aa"] = 3이 안 먹히기 때문에 이 방법으로만 값을 바꿀 수 있다.
}

multiset

hash_map