시퀀스 컨테이너와 비슷하지만 다른 연관 컨테이너는 set과 map이 존재한다.
일단 모두다 트리구조로 이루어져 있고
map은 pair형태를 띄고 있으며, multi가 아닌 연관 컨테이너는 중복된 값을 허용하지 않는 다는 특징이 있다.
Set 예제
#include <iostream>
#include <set> // set을 사용하기 위한 해더
void main()
{
// std::set<int> coll;
std::multiset<int> coll;
// 값의 삽입 순서와 상관없이 정렬됨.
coll.insert(3);
coll.insert(1);
coll.insert(5);
coll.insert(4);
coll.insert(1);
// 1은 이미 들어가 있기 때문에,
// set일 때는 안들어 가고, multiset일때는 들어 간다.
coll.insert(6);
coll.insert(2);
// iterator로 이동
// std::set<int>::const_iterator pos;
std::multiset<int>::const_iterator pos;
// 출력하면 정렬되어 값이 나오게 된다.
for( pos = coll.begin(); pos != coll.end(); ++pos )
{
std::cout << *pos << ' ';
}
std::cout << std::endl;
}
// 결과
// 1 1 2 3 4 5 6
map 예제
#include <iostream>
#include <map> // map을 사용하기 위한 해더
#include <string>
void main()
{
std::map<int, std::string> coll;
// std::multimap<int, std::string> coll2;
// coll2[4] = "Test"; multimap이기 때문에 안됨.
// 데이터 삽입 방법
coll[0] = "Test"; // 이짓은 map밖에 안된다. multimap은 안됨
// 값의 삽입은 insert를 사용
// make_pair를 사용해서 2가지 값을 넣어 주고 있다.
coll.insert(std::make_pair(5, "tagged"));
coll.insert(std::make_pair(2, "a"));
coll.insert(std::make_pair(1, "this"));
coll.insert(std::make_pair(4, "of"));
coll.insert(std::make_pair(6, "strings"));
coll.insert(std::make_pair(1, "is")); // multimap만 중복 가능,map이라 안됨
coll.insert(std::make_pair(3, "multimap"));
std::map<int, std::string>::const_iterator pos;
for( pos= coll.begin(); pos != coll.end(); ++pos )
{
std::cout << pos->first << ' ' << pos->second << ' ';
}
std::cout << std::endl;
}
// 결과
// 0 Test 1 this 2 a 3 multimap 4 of 5 targed 6 strings
소스 코드만 봐도 충분히 이해가 가능하지만,
map에 대해서는 [] 사용이 가능하다.
insert를 사용하는것이 일반적이지만,
특이한 점은,
insert를 사용해서 "test", 123을 넣었다면,
coll2["test"] = 123; 과 같은 의미라는것이다.
즉, 앞에 들어가는 값은 그것의 타입에 신경 쓰지 않고,
coll2["test"] 식으로 파악을 하게 된다는 것에 대해서 신기할 뿐
특별히 문제가 되는것은 없다.
'프로그래밍 > STL' 카테고리의 다른 글
함수객체 (0) | 2010.04.19 |
---|---|
algorithm (0) | 2010.04.08 |
iterator - 반복자 (0) | 2010.04.08 |
시퀀스 컨테이너 - vector, list, deque (0) | 2010.04.05 |
용어적 설명. (0) | 2010.04.05 |