SDC 3rd 최흥배님 - Boost.multi_index 사용하기

5,860 views
5,572 views

Published on

Published in: Technology
0 Comments
3 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
5,860
On SlideShare
0
From Embeds
0
Number of Embeds
2,959
Actions
Shares
0
Downloads
32
Comments
0
Likes
3
Embeds 0
No embeds

No notes for slide

SDC 3rd 최흥배님 - Boost.multi_index 사용하기

  1. 1. Boost.multi_index 최흥배 Twitter : @jacking75 E-mail : jacking75@gmail.com 주체 : 온라인 서버 개발자 모임 후원 : 넷텐션
  2. 2. multi_index multi : 다양한 index : 색인
  3. 3. class Character{ Key INT32 m_nCharID; Key wstring m_strName; INT16 nLevel; INT32 nMoney; .....};
  4. 4. std::map<INT32, Character> m_CharSetByCharIDstd::map<wstring, Character> m_CharSetByNamem_CharSetByCharID.insertm_CharSetByName.insertm_CharSetByName.erasem_CharSetByCharID.erase
  5. 5. struct Character std::map<INT32, Character> m_CharSetByCharID{ INT32 nCharID; std::map<wstring, Character> m_CharSetByName wstring strName; INT16 nLevel; m_CharSetByCharID.insert INT32 nMoney; m_CharSetByName.insert .....}; m_CharSetByName.erase m_CharSetByCharID.erase Key는 2개이지만 둘 다 하나의 객체를 가리킨다 실수로 m_CharSetByCharID 나 m_CharSetByName 중 한쪽만 추가를 하던가, 또는 한쪽만 삭제를 한다면
  6. 6. multi_index
  7. 7. Boost.multi_index
  8. 8. 저장할 객체 캐릭터 ID로 검색 캐릭터 이름으로 검색// 컨테이너의 키를 선언typedef boost::multi_index::member<Character, int, &Character::m_nCharID> IDX_CHARID;typedef boost::multi_index::member<Character, std::wstring, &Character::m_strName> IDX_NAME;// 인덱싱 타입을 선언typedef struct indices : public boost::multi_index::indexed_by < boost::multi_index::hashed_unique<IDX_CHARID> , boost::multi_index::hashed_unique<IDX_NAME> >{ enum INDEX { IDX_UNIQUE_CHARID =0 , IDX_UNIQUE_NAME , IDX_END };} INDICES;
  9. 9. 인덱스의 종류 type specifier ordered_unique ordered ordered_non_unique key-based hashed_unique hashed hashed_non_unique sequenced non key-based random_access
  10. 10. 인덱스 성능 삽입 삭제 기능 ordered_unique O(log N) O(1) set, multiset, ordered_non_unique map, multimap hashed_unique O(1) O(1) unordered_set, hashed_non_unique unordered_map sequenced O(1) O(1) list random_access O(1) O(뒤에 있는 요소 수) vector
  11. 11. 컨테이너<boost/multi_index_container.hpp> multi_index_container를 사용한다 인덱스 set이나 map과 같이 정렬되는 인덱스를 사용한다<boost/multi_index/ordered_index.hpp> ordered_unique, ordered_non_unique 해쉬 키를 가진 인덱스를 사용한다<boost/multi_index/hashed_index.hpp> hashed_unique, hashed_non_unique list와 같은 순번 대로 접근하는 인덱스를 사용한다<boost/multi_index/sequenced_index.hpp> sequenced vector와 같이 임의 접근이 가능한 인덱스를 사용한다<boost/multi_index/random_access_index.hpp> random_access 정렬 방법<boost/multi_index/key_extractors.hpp> 아래의 모든 헤더 파일을 포함한다<boost/multi_index/identity.hpp> 요소의 클래스(인스턴스)끼리 비교하는 경우 필요<boost/multi_index/member> 요소의 멥버 변수를 비교하는 경우에 필요<boost/multi_index/mem_fun.hpp> 요소의 멤버 함수를 비교하는 경우에 필요<boost/multi_index/global_fun.hpp> 전역 함수로 비교하는 경우에 필요<boost/multi_index/composite_key.hpp> 복수의 조건으로 비교하는 경우 필요
  12. 12. template< typename Value, typenameIndexSpecifierList=indexed_by<ordered_unique<identity<Value> > >, typename Allocator=std::allocator<Value>>class multi_index_container;
  13. 13. Key 종류 identity member const_mem_fun mem_fun global_fun composite_key
  14. 14. Demo
  15. 15.  Tutorial 1 std::list && std::multiset Tutorial 2 std::vector && std::multiset Tutorial 3 가독성 UP!
  16. 16.  Tutorial 4 유저 정의형 타입 사용 Tutorial 5 유저 정의형 타입 && 멤버 함수 키 && 합성 키 && bound Tutorial 6 유저 정의형 타입 && std::multiset && std::map
  17. 17.  Tutorial 7 replace Tutorial 8 modify Tutorial 9 member_offset
  18. 18. 공식 문서http://www.boost.org/doc/libs/1_47_0/libs/multi_index/doc/핵심 정리(일어)http://www24.atwiki.jp/reisiki/pages/59.html

×