About CAltMap 최흥배 E-Mail : jacking75@gmail.com.

Slides:



Advertisements
Similar presentations
ㅎㅎ 구조체 구조체 사용하기 함수 매개변수로서의 구조체 구조체 포인터와 레퍼런스 구조체 배열.
Advertisements

ㅎㅎ 구조체 C++ 프로그래밍 기초 : 객체지향의 시작 구조체 사용하기 함수 매개변수로서의 구조체 구조체 포인터와 레퍼런스
쉽게 풀어쓴 C언어 Express 제11장 포인터 C Express Slide 1 (of 27)
제14장 동적 메모리.
최윤정 Java 프로그래밍 클래스 상속 최윤정
9장. C 언어의 핵심! 함수. 9장. C 언어의 핵심! 함수 9-1 함수의 정의와 선언 main 함수 다시 보기 : 함수의 기본 형태 { } 그림 9-1.
Java로 배우는 디자인패턴 입문 Chapter 5. Singleton 단 하나의 인스턴스
연결리스트(linked list).
제 9 장 구조체와 공용체.
Report #2 - Solution 문제 #1: 다음과 같이 프로그램을 작성하라.
보고서 #7 (기한: 6/2) 2개의 스택, stk1, stk2를 이용하여 큐를 구현하라.
자료 구조: Chapter 3 (2)구조체, 포인터
3장. 변수와 연산자. 3장. 변수와 연산자 3-1 연산자, 덧셈 연산자 연산자란 무엇인가? 연산을 요구할 때 사용되는 기호 ex : +, -, *, / 3-1 연산자, 덧셈 연산자 연산자란 무엇인가? 연산을 요구할 때 사용되는 기호 ex : +, -, *, /
윤성우의 열혈 C 프로그래밍 윤성우 저 열혈강의 C 프로그래밍 개정판 Chapter 12. 포인터의 이해.
5장 배열 작성자 : 변재현.
쉽게 풀어쓴 C언어 Express 제17장 동적메모리와 연결리스트 C Express Slide 1 (of 13)
5장. 참조 타입.
제 3장. C보다 나은 C++ II.
P150 문제를 프로그래밍 할 것 Source file (헤더파일포함), 실행화면 (학번_이름_1.txt)
11장. 포인터 01_ 포인터의 기본 02_ 포인터와 Const.
8장 함수 함수의 필요성 라이브러리 함수와 사용자 정의 함수 함수의 정의, 원형, 호출 배열을 함수 인자로 전달 재귀호출.
SqlParameter 클래스 선문 비트 18기 발표자 : 박성한.
컴퓨터 프로그래밍 기초 #02 : printf(), scanf()
프로그래밍 랩 – 7주 리스트.
14. 예외처리.
11장. 1차원 배열.
C#.
13. 연산자 오버로딩.
10강. JSP 본격적으로 살펴보기-II 스크립트릿, 선언, 표현식 지시자 주석 Lecturer Kim Myoung-Ho
C 프로그래밍 C언어 (CSE2035) (Chap11. Derived types-enumerated, structure, and union) (1-1) Sungwook Kim Sogang University Seoul, Korea Tel:
어서와 C언어는 처음이지 제14장.
인터넷응용프로그래밍 JavaScript(Intro).
13. 포인터와 배열! 함께 이해하기 IT응용시스템공학과 김 형 진 교수.
3장 상수 변수 기본 자료형 키워드와 식별자 상수와 변수 기본 자료형 형변환 자료형의 재정의.
24장. 파일 입출력.
쉽게 풀어쓴 C언어 Express 제14장 포인터 활용 C Express Slide 1 (of 22)
19. 함수 포인터와 void 포인터.
Chapter6 : JVM과 메모리 6.1 JVM의 구조와 메모리 모델 6.2 프로그램 실행과 메모리 6.3 객체생성과 메모리
27강 JAVA Collections - II - Map계열 컬렉션 클래스 살펴보기 - Set계열 컬렉션 클래스 살펴보기
컴퓨터 프로그래밍 기초 - 10th : 포인터 및 구조체 -
2장. 변수와 타입.
08장 쿠키와 세션.
컴퓨터 프로그래밍 기초 - 8th : 함수와 변수 / 배열 -
5강. 배열 배열이란? 배열의 문법 변수와 같이 이해하는 배열의 메모리 구조의 이해 레퍼런스의 이해 다차원 배열
문자열 컴퓨터시뮬레이션학과 2015년 봄학기 담당교수 : 이형원 E304호,
14강. 세션 세션이란? 세션 문법 Lecturer Kim Myoung-Ho Nickname 블스
CHAP 21. 전화, SMS, 주소록.
9장. C 언어의 핵심! 함수. 9장. C 언어의 핵심! 함수 9-1 함수의 정의와 선언 main 함수 다시 보기 : 함수의 기본 형태 { } 그림 9-1.
데이터 동적 할당 Collection class.
DA :: 퀵 정렬 Quick Sort 퀵 정렬은 비교방식의 정렬 중 가장 빠른 정렬방법이다.
7주차: Functions and Arrays
제 8장. 클래스의 활용 학기 프로그래밍언어및실습 (C++).
3. 모듈 (5장. 모듈).
함수, 모듈.
컴퓨터 프로그래밍 기초 - 9th : 배열 / 포인터 -
구조체(struct)와 공용체(union)
Summary of Pointers and Arrays
Numerical Analysis Programming using NRs
Static과 const 선언 조 병 규 한 국 교 통 대 학 교 SQ Lab..
동적메모리와 연결 리스트 컴퓨터시뮬레이션학과 2016년 봄학기 담당교수 : 이형원 E304호,
제 4 장 Record.
1. 지역변수와 전역변수 2. auto, register 3. static,extern 4. 도움말 사용법
어서와 C언어는 처음이지 제21장.
 6장. SQL 쿼리.
개정판 누구나 즐기는 C언어 콘서트 제13장 동적 메모리 출처: pixabay.
13. 포인터와 배열! 함께 이해하기.
C++ Espresso 제15장 STL 알고리즘.
Pointers summary.
6 객체.
2019 2학기 9장 배열과 포인터 1. 주소, 주소연산자(&) 2. 포인터, 역참조연산자(*) 3. 배열과 포인터.
Presentation transcript:

About CAltMap 최흥배 E-Mail : jacking75@gmail.com

생성자 파라메터 CAtlMap( UINT nBins = 17, float fOptimalLoad = 0.75f, float fLoThreshold = 0.25f, float fHiThreshold = 2.25f, UINT nBlockSize = 10 ) throw ( );   파라메터 nBins 저장 되어 있는 요소로의 포인트를 가진 bin 수. fOptimalLoad 최적의 읽기 비율 fLoThreshold 읽기 비율의 최저한의 수 fHiThreshold 읽기 비율의 최대한의 수 nBlockSize 블록 크기

CAtlMap은 해시 알고리즘을 사용합니다. 이 인덱스는 들어있는 성분에 대한 포인터를 포함하는 "빈"을 참조합니다. 빈이 사용중인 경우는 연결 리스트를 만들어 다음 요소에 접근합니다. 요소로 이동합니다. 리스트 조사는 목적 요소에 직접 접근하여 비교하면 느리므로 맵 구조체에서는 성능과 공간 조건의 밸런스를 고려해야 합니다. 대부분 기존 파라메터를 선택하면 최적의 결과를 얻을 수 있습니다. 읽기 비율이라는 것은 맵 오브젝트에 들어가 있는 요소 수에 대한 “빈”수의 비율입니다. 파라메터 fOptimalLoad 값은 맵 구조체의 재 계산을 행할 때 필요한 빈 수를 계산할 때에 사용 됩니다. 이 값은 CAtlMap::SetOptimalLoad 메소드를 사용하여 변경 가능합니다. 파라메터 fLoThreshold는 읽기 비율의 최소 값으로 CAtlMap이 맵의 최적의 크기를 재 계산할 때까지 유효합니다. 파라메터 fHiThreshold는 읽기 비율의 최대 값으로 CAtlMap이 맵의 최적의 크기를 재 계산할 때까지 유효합니다. 이 재 계산 프로세스는 ‘재 해쉬’라고 부르며, 기본으로 유효하게 설정 되어 있습니다. 한번에 대량의 데이터를 입력하는 경우 등에 이 프로세스를 무효로 할 때는 CAtlMap::DisableAutoRehash을 호출합니다. 이 프로세스를 다시 유효하게 하려면 CAtlMap::EnableAutoRehash 메소드를 호출합니다. 파라메터 nBlockSize는 새로운 요소를 요구할 때 할당 되는 메모리 량입니다. 블록 사이즈를 크게하면 메모리 할당 루틴의 호출은 적게 되지만, 사용하는 리소스는 크게 됩니다. 데이터를 넣기 전에 CAtlMap::InitHashTable을 호출하여 해쉬 테이블을 초기화 할 필요가 있습니다.

// Confirm the number of elements in the map ATLASSERT(mySinTable.GetCount()==45);   // Walk through all the elements in the map. // First, get start position. POSITION pos; int key; double value; pos = mySinTable.GetStartPosition(); // Now iterate the map, element by element while (pos != NULL) { key = mySinTable.GetKeyAt(pos); value = mySinTable.GetNextValue(pos); } return 0; // Example program for CAtlMap class   #include "stdafx.h" #include "atlcoll.h" #include "math.h" int main(int argc, char* argv[]) { // Create a map which stores a double // value using an integer key CAtlMap<int, double> mySinTable; int i; // Initialize the Hash Table mySinTable.InitHashTable(257); // Add items to the map for (i=0; i<90; i++) mySinTable[i]=sin(i); // Confirm the map is valid mySinTable.AssertValid(); // Confirm the number of elements in the map ATLASSERT(mySinTable.GetCount()==90); // Remove elements with even key values for (i=0; i<90; i+=2) mySinTable.RemoveKey(i);

InitHashTable 원형 : bool InitHashTable( UINT nBins, bool bAllocNow = true ); 파라메터 nBins 해쉬 테이블이 사용할 ‘빈’ 수. bAllocNow 메모리를 몇 개 할당 할 것인가를 지시하는 플래그 반환 값 초기화가 정상으로 종료한 경우는 true 반환. 그 이외는 false 를 반환한다. InitHashTable 은 해쉬 테이블에 요소를 넣기 전에 호출할 필요가 있다. 이 함수를 명시적으로 호출하지 않은 경우 요소가 처음 추가 될 때에 CAtlMap 생성자에 의해 지정된 ‘빈’ 수를 사용하여 자동적으로 호출된다. 명시적으로 호출한 경우 nBins 파라메터로 지정한 새로운 ‘빈’ 수를 사용하여 맵이 초기화 된다. 파라메터 bAllocNow 을 false 로 하면 처음 요구가 있을 때 해쉬 테이블에 필요한 메모리가 할당 되지는 않습니다. 이것은 맵이 어떻게 사용 되는지 잘 모를 경우에 편리합니다.

SetAt 추가 원형 : POSITION SetAt( KINARGTYPE key, VINARGTYPE value ); 파라메터 CAtlMap 오브젝트에 추가하는 키 값 value CAtlMap 오브젝트에 추가하는 값 반환 값 CAtlMap 오브젝트 내에 키와 값 조합시킨 요소의 위치를 반환한다. 일치하는 키가 발견되는 경우 SetAt 은 기존 요소의 값을 변경한다. 키가 발견 되지 않은 경우 새로운 키와 값 조합이 만들어진다.

void main() { CAtlMap< int, GameItem > AtlMapTest; GameItem tGameItem1(1,1000); AtlMapTest.SetAt( 1, tGameItem1 ); GameItem tGameItem2(2,344); AtlMapTest.SetAt( 2, tGameItem2 ); GameItem tGameItem3(3,2000); AtlMapTest.SetAt( 3, tGameItem3 ); CAtlMap< int, GameItem >::CPair* pair = NULL; POSITION pos = AtlMapTest.GetStartPosition(); while (pos) pair = AtlMapTest.GetNext(pos); cout << "Key(" << pair->m_key << ") Value(" << pair->m_value._BuyMoney << ")" << endl; } #include <iostream> #include <windows.h> #include <atlcoll.h> using namespace std; // CAtlMap에서 사용하는 경우 기본 생성자 이외의 생성자를 // 정의하면 무조건 기본 생성자를 정의해야 CAtlMap에서 // 사용할 수 있다. struct GameItem { GameItem() { } GameItem( int ItemCd, int BuyMoney ) _ItemCd = ItemCd; _BuyMoney = BuyMoney; } int _ItemCd; int _BuyMoney; };

RemoveKey 키로 삭제 원형 : bool RemoveKey( KINARGTYPE key ) throw( ); 파라메터 삭제할 요소의 조합에 대응하는 키 반환 값 키가 발견되어 삭제된 경우는 true를 반환. 그 이외의 경우는 false를 반환.

RemoveAtPos 위치 카운터로 삭제 원형 : void RemoveAtPos( POSITION pos ) throw( ); 파라메터 pos CAtlMap::GetNextAssoc 또는 CAtlMap::GetStartPosition 로의 이전 호출에서 반환된 위치 카운터. 해설 지정된 위치케 저장 되어 있는 키와 값 조합을 삭제한다. 요소를 저장하기 위해 사용되고 있던 메모리는 해제한다. pos 가 참조하고 있는 POSITION 는 무효로 됩니다만 맵 내의 그 외 요소의 POSITION 은 유효합니다. 이것에 의해 요소의 승순이 갱신되어도 별 문제는 없습니다.

RemoveAll 모두 삭제 원형 : void RemoveAll() throw( ); 해설 CAtlMap 오브젝트를 clear하여 요소를 저장하기 위해 사용한 메모리를 해방한다.

Lookup 검색 원형 : bool Lookup( KINARGTYPE key, VOUTARGTYPE value ) const; const CPair* Lookup( KINARGTYPE key ) const throw( ); CPair* Lookup( KINARGTYPE key ) throw( ); 파라메터 key 검색하는 요소를 식별할 키. value 검색된 값을 받을 변수. 반환 값 첫 번째 형식은 키가 발견 된 경우 true를 반환. 그 이외의 경우는 false를 반환. 두 번째와 세 번째 형식에서는 CPair 의 포인터를 반환합니다. 이 포인터는 CAtlMap::GetNext 등의 호출 위치로서 사용할 수 있습니다. Lookup 은 해시 알고리즘을 사용하여 지정한 파라메터의 키와 완전하게 일치하는 키를 가진 맵 요소를 빠르게 검색합니다.

예) CAtlMap< int, GameItem > AtlMapTest; …….. CAtlMap< int, GameItem >::CPair* pFindValue = AtlMapTest.Lookup(2); // 값 변경도 가능 pFindValue->m_value._BuyMoney = 400;

SetValueAt 값 변경 원형 : void SetValueAt( POSITION pos, VINARGTYPE value ); 파라메터 pos CAtlMap::GetNextAssoc 또는 CAtlMap::GetStartPosition 로의 이전 호출에서 반환된 위치. value CAtlMap 오브젝트에 추가하는 값. CAtlMap 오브젝트 내의 지정한 위치에 저장되어 있는 값을 변경한다.

GetStartPosition 맵의 시작 위치 원형 : POSITION GetStartPosition( ) const throw( ); 반환 값 시작 위치를 반환한다. 맵이 비어 있다면 NULL 을 반환한다 해설 POSITION 값을 반환하여 맵의 반복처리를 시작한다. POSITION 값을 GetNextAssoc 메소드에 넘기는 것도 가능하다.

GetNext 다음 위치 원형 : CPair* GetNext( POSITION& pos ) throw( ); const CPair* GetNext( POSITION& pos ) const throw( ); 파라메터 pos CAtlMap::GetNextAssoc 또는 CAtlMap::GetStartPosition 로의 이전 호출에서 반환된 위치 카운터. 반환 값 맵에 저장되어 있는 다음 키와 값 조합 요소의 포인터를 반환한다. 위치 카운더 pos는 호출 후에 매회 갱신된다. 맵 내의 마지막 요소를 얻으면 pos에는 NULL 이 설정된다.

순회 예제 CAtlMap< int, GameItem > AtlMapTest; ……. CAtlMap< int, GameItem >::CPair* pair = NULL; POSITION pos = AtlMapTest.GetStartPosition(); while (pos) { pair = AtlMapTest.GetNext(pos); cout << "Key(" << pair->m_key << ") Value(" << pair->m_value._BuyMoney << ")" << endl; }

GetCount 맵의 총 개수 원형 : size_t GetCount( ) const throw( ); 반환 값 맵 오브젝트의 요소 수를 반환한다. 하나의 요소는 키와 값의 조합으로 되어 있다.

IsEmpty 맵이 있었는가? 원형 : bool IsEmpty( ) const throw( ); 반환 값 맵이 빈 경우는 true 를 반환합니다. 그 이외의 경우는 false 을 반환합니다.

GetKeyAt 지정된 위치에 있는 키를 획득 원형 : const K& GetKeyAt( POSITION pos ) const throw( ); 파라메터 pos CAtlMap::GetNextAssoc 또는 CAtlMap::GetStartPosition 로의 이전 호출에서 반환 된 위치 카운터. 반환 값 CAtlMap 오브젝트 내의 지정된 위치에 저장되어 있는 키의 참조를 반환한다.

GetNextKey 다음 위치에 있는 키를 획득 원형 : const K& GetNextKey( POSITION& pos ) const throw( ); 파라메터 pos CAtlMap::GetNextAssoc 또는 CAtlMap::GetStartPosition 로의 이전 호출에서 반환 된 위치 카운터. 반환 값 맵 내의 다음 키의 참조를 반환한다. 해설 현재의 위치 카운터 pos 를 갱신합니다. 맵 내에 다음 엔트리가 존재하지 않는 경우 위치 카운터에는 NULL 이 설정됩니다.

GetValueAt 지정된 위치에 있는 값을 획득 원형 : V& GetValueAt( POSITION pos ) throw( ); const V& GetValueAt( POSITION pos ) const throw( ); 파라메터 pos CAtlMap::GetNextAssoc 또는 CAtlMap::GetStartPosition 로의 이전 호출에서 반환된 위치 카운터. 반환 값 CAtlMap 오브젝트 내 지정된 위치에 저장되어 있는 값의 참조를 반환한다.

GetNextValue 다음 위치에 있는 값을 획득 원형 : V& GetNextValue( POSITION& pos ) throw( ); const V& GetNextValue( POSITION& pos ) const throw( ); 파라메터 pos CAtlMap::GetNextAssoc 또는 CAtlMap::GetStartPosition 로의 이전 호출에서 반환된 위치 카운터. 반환 값 맵 내의 다음 위치의 값의 참조를 반환. 해설 현재 위치 카운터 pos를 갱신한다. 맵 내에 다음 엔트리가 존재하지 않는 경우 위치 카운터에는 NULL이 설정된다.

Rehash 재 해쉬한다. 원형 : void Rehash( UINT nBins = 0 ); 파라메터 nBins 해쉬 테이블에서 사용하는 빈의 수. 해설 nBins 가 0 인 경우 CAtlMap 은 맵 내의 요소 수와 최적의 읽기 설정 값을 토대로 적절한 수치를 계산합니다. 통상 재 해쉬 프로세스는 자동 처리 됩니다만 CAtlMap::DisableAutoRehash 가 호출 되는 경우는 이 메소드가 사이즈 변경 처리를 필요에 응합니다.

SetOptimalLoad 읽기 최적화 설정 원형 : void SetOptimalLoad( float fOptimalLoad, float fLoThreshold, float fHiThreshold, bool bRehashNow = false ); 파라메터 fOptimalLoad 최적의 읽기 비율 fLoThreshold 읽기 비율의 최소한의 값 fHiThreshold 읽기 비율의 최대한의 값. bRehashNow 해쉬 테이블의 재 계산이 필요할지 말지를 표시하는 플래그 해설 이 메소드는 CAtlMap 오브젝트의 최적의 읽기 비율을 재 정의한다. 각 파라메터의 설명은에 대해서는 「CAtlMap::CAtlMap」을 참고. bRehashNow 의 반환 값이 true 이고, 또한 요소 수가 최소 값보다도 작은 경우랑 최대 값 보다 큰 경우는 해쉬 테이블이 재 계산된다.

DisableAutoRehash 자동 재 해쉬를 무효로 원형 : void DisableAutoRehash( ) throw( ); 해설 자동 재 해쉬가 유효로 되어 있는 경우 (기본 설정) 읽기 비율 (배열에 저장되어 있는 요소 수에 대한 빈 수의 비율)이 맵 작성 시에 설정된 최소 값 보다도 작게 되던가 최대 값 보다도 크게 되거나 하면 해쉬 테이블의 빈 수는 자동적으로 재 계산된다. DisableAutoRehash 는 한번에 대량의 요소를 맵에 추가할 때에 사용하면 가장 좋다.제한을 넘을 때마다 재 해쉬 프로세스를 발생 시키는 것보다도 DisableAutoRehash 를 호출하여 요소를 추가한 후에 CAtlMap::EnableAutoRehash 를 호출하는 쪽이 효율적이다.

EnableAutoRehash 자동 재 해쉬를 유효로 원형 : void EnableAutoRehash( ) throw( ); 해설 자동 재 해쉬가 유효한 경우(기본 설정) 읽기 비율(배열에 저장되어 있는 요소 수에 대한 빈 수의 비율)이 맵 작성 시에 설정된 최소 값보다도 작던가, 최대 값보다도 크게 되면 해 쉬 테이블의 빈 수가 자동적으로 재 계산된다. EnableAutoRefresh 는 대부분의 경우 CAtlMap::DisableAutoRehash 의 호출 후에 사용된다.

http://msdn.microsoft.com/ja-jp/library/49x7ef2y(VS.80).aspx