#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와 동일
}
map과 동일한 구조이나 key만 저장한다. (트리구조 기반의 시퀀스 컨테이너 느낌)
삽입과 동시에 정렬이 필요할 때
빠른 검색으로 특정 값 존재 여부(find함수)를 가려내야 할 때
사용하면 적합하다.
key가 곧 value이자 인덱스다.
#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와 동일
}
#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이 안 먹히기 때문에 이 방법으로만 값을 바꿀 수 있다.
}