본문 바로가기
프로그래밍/boost

boost::unordered set, map, mutiset, multimap

by neive 2012. 3. 26.
728x90



boost 에서 지원하는 set, multiset, map, multimap 입니다
hash 로 동작하고 일반적인 stl 보다 빠르니 사용해보는게 좋겠죠
boost::unorder_xxx 형태로 정의되어있으니 찾아봅시다.

예제
#include <stdio.h>
#include <tchar.h>

#include <iostream>
#include <string>
#include <sstream>
#include <stdlib.h>
#include <vector>
#include <map>
#include <fstream>

#include <boost/unordered_set.hpp>
#include <boost/unordered_map.hpp>

class CTest
{
	typedef boost::unordered_set<int> IDSet;
	typedef boost::unordered_map<std::string, IDSet> SetMap;

	SetMap m_DataMap;

public:

	void Run()
	{
		IDSet temp;
		temp.insert(1);	// 데이터 값 아무거나 넣기

		m_DataMap["TEST"] = temp;	// map 에 데이터 추가
		m_DataMap["TEST1"] = temp;
		m_DataMap["TEST2"] = temp;

		if(m_DataMap.find("TEST") != m_DataMap.end())
		{
			IDSet tmp;
			tmp = m_DataMap.at("TEST");	// 키값으로 데이터값 얻기

			for(IDSet::iterator it = tmp.begin(); it != tmp.end(); it++)
				std::cout << "Test  " << (*it) << std::endl;
			std::cout << "-----" << std::endl;

			tmp.insert(2);
			tmp.insert(2);	// 중복키 한번 더 넣어보기
			for(IDSet::iterator it = tmp.begin(); it != tmp.end(); it++)
				std::cout << "Test  " << (*it) << std::endl;
			std::cout << "-----" << std::endl;

			tmp.erase(1);	// 키 지우기
			for(IDSet::iterator it = tmp.begin(); it != tmp.end(); it++)
				std::cout << "Test  " << (*it) << std::endl;
			std::cout << "-----" << std::endl;
		}

		if(m_DataMap.find("TEST1") != m_DataMap.end())
		{
			m_DataMap.erase("TEST1");
			if(m_DataMap.find("TEST1") == m_DataMap.end())
				std::cout << "Delete OK" << std::endl;
		}

		std::cout << "END " << std::endl;
	}

	CTest(void);
	virtual ~CTest(void);
};


결과

Test  1
-----
Test  1
Test  2
-----
Test  2
-----
Delete OK

728x90

댓글