CS/C++

뇌를 자극하는 C++ STL : 7장. 연관 컨테이너

샤아이인 2022. 1. 18.

 

내돈내고 내가 공부한것을 올리며, 중요한 단원은 저 자신도 곱씹어 볼겸 가겹게 포스팅 하겠습니다.

1) 7장. 연관 컨테이너

연관 컨테이너는 특정 정렬규칙에 맞게 원소들이 정렬된다. STL에는 set, multiset, map, multimap이 있다.

이들은 같은 인터페이스(생성자, 멤버함수, 연산자)를 제공한다.

 

연관 컨테이너는 모두 같은 인터페이스의 멤버 함수를 제공합니다.

 

Set

pair 객체를통하여 insert 삽입의 성공유무를 알아볼 것 이다.pair에서 first와 second의 의미는 이전 따배씨쁠쁠에서 배웠던적이 있다.

#include <iostream>
#include <set>
using namespace std;

int main()
{
	set<int> s;

	pair<set<int>::iterator, bool> pr;

	pr = s.insert(20); // 20의 첫번째 삽입
	s.insert(80);
	s.insert(40);

	if (true == pr.second)
		cout << *pr.first << " Success!" << endl;
	else
		cout << *pr.first << " already have!" << endl;
 
	set<int>::iterator iter;
	for (iter = s.begin(); iter != s.end(); iter++)
		cout << *iter << " ";
	cout << endl;

	pr = s.insert(20);

	if (true == pr.second)
		cout << *pr.first << " Success!" << endl;
	else
		cout << *pr.first << " already have!" << endl;

	for (iter = s.begin(); iter != s.end(); iter++)
		cout << *iter << " ";
	cout << endl;

	return 0;
}
 

결과는 다음과 같다.

pr.first가 20을 가리키는 반복자이고, second가 삽입 성공여부를 알려주는 bool값이다.

 

연관 컨테이너의 find 멤버함수는 key를 찾을때 == 연산을 사용하지 않는다. 정렬 기준에 의해 key가 정렬되어 있으므로 컨테이너의 정렬 기준 조건자를 이용하여 찾는다. 만약 set의 정렬 기준이 less라면 a가 b보다 앞서있지 않고 b도 a보다 앞서있지 않다면 같다고 판단한다.

 

Map

map 컨테이너는 원소로 key와 value의 쌍을 저장한다. 또한 map은 [] 연산자를 제공하여 key에 해당하는 원소의 value에 쉽게 접근하거나 변경이 가능하다. 다음 코드를 통해 확인해 보자.

#include <iostream>
#include <map>
using namespace std;

int main()
{
	map<int, int> m;

	m[5] = 777;
	m[3] = 100;
	m[8] = 30;
	m[4] = 40;
	m[9] = 50;
	m[1] = 70;
	m[7] = 100;

	map<int, int>::iterator iter;
	for (iter = m.begin(); iter != m.end(); iter++)
		cout << "(" << iter->first << "," << iter->second << ")" << " ";
	cout << endl;

	m[5] = 444;

	for (iter = m.begin(); iter != m.end(); iter++)
		cout << "(" << iter->first << "," << iter->second << ")" << " ";
	cout << endl;

	return 0;
}
 

결과로는 다음과 같다.

key값이 5인 노드는 value값이 777에서 444로 변경되었다.


2) 나의 현황

슬슬 알고리즘 공부 계획을 세워야 하는데 어떻게 계획을 짜볼지 고민중이다.

한달정도로 계획잡았는데, 우선 문병로 교수님의 쉽게 배우는 알고리즘 이라는 책 한권을 샀다.

이책을 읽으면서 병행해볼 알고리즘 강의를 찾아보고 있다. 딱 C++코드로 알고리즘을 설명하는 강의는 보이지 않는것 같다.

좀더 찾아봐야겠다.

이글의 모든 사진과 내용의 출처는 공동환 님께 있습니다.

댓글