다음을 통해 공유


CMapStringToOb 수업

고유한 CString 개체를 CObject 포인터에 매핑하는 사전 컬렉션 클래스입니다.

구문

class CMapStringToOb : public CObject

멤버

공용 생성자

속성 설명
CMapStringToOb::CMapStringToOb 생성자입니다.

공용 메서드

이름 설명
CMapStringToOb::GetCount 이 맵의 요소 수를 반환합니다.
CMapStringToOb::GetHashTableSize 해시 테이블의 현재 요소 수를 결정합니다.
CMapStringToOb::GetNextAssoc 반복할 다음 요소를 가져옵니다.
CMapStringToOb::GetSize 이 맵의 요소 수를 반환합니다.
CMapStringToOb::GetStartPosition 첫 번째 요소의 위치를 반환합니다.
CMapStringToOb::HashKey 지정된 키의 해시 값을 계산합니다.
CMapStringToOb::InitHashTable 해시 테이블을 초기화합니다.
CMapStringToOb::IsEmpty 빈 맵 조건(요소 없음)에 대한 테스트입니다.
CMapStringToOb::Lookup void 포인터 키를 기반으로 void 포인터를 조회합니다. 가리키는 엔터티가 아닌 포인터 값이 키 비교에 사용됩니다.
CMapStringToOb::LookupKey 지정된 키 값과 연결된 키에 대한 참조를 반환합니다.
CMapStringToOb::RemoveAll 이 맵에서 모든 요소를 제거합니다.
CMapStringToOb::RemoveKey 키로 지정된 요소를 제거합니다.
CMapStringToOb::SetAt 맵에 요소를 삽입합니다. 는 일치하는 키가 있으면 기존 요소를 대체합니다.

Public 연산자

속성 설명
CMapStringToOb::operator [ ] 맵에 요소를 삽입합니다. 연산자 대체는 SetAt다음과 같습니다.

설명

맵에 쌍(요소)을 CString- CObject* 삽입한 후에는 문자열 또는 값을 키로 사용하여 쌍을 효율적으로 검색하거나 CString 삭제할 수 있습니다. 지도의 모든 요소를 반복할 수도 있습니다.

형식 POSITION 의 변수는 모든 맵 변형에서 대체 항목 액세스에 사용됩니다. 항목을 POSITION "기억"하고 지도를 반복하는 데 사용할 수 있습니다. 이 반복은 키 값별로 순차적이라고 생각할 수 있습니다. 그것이 아니야. 검색된 요소의 시퀀스는 확정되지 않습니다.

CMapStringToOb는 serialization 및 요소 덤프를 지원하기 위해 IMPLEMENT_SERIAL 매크로를 통합합니다. 맵이 오버로드된 insertion( <<) 연산자 또는 Serialize 멤버 함수를 사용하여 보관에 저장되면 각 요소가 차례로 serialize됩니다.

맵에 있는 개별 요소(값 및 CObject 내용)CString의 진단 덤프가 필요한 경우 덤프 컨텍스트의 깊이를 1 이상으로 설정해야 합니다.

개체가 CMapStringToOb 삭제되거나 요소가 제거되면 CString 개체와 포인터가 CObject 제거됩니다. 포인터에서 CObject 참조하는 개체는 제거되지 않습니다.

지도 클래스 파생은 목록 파생과 유사합니다. 특수 용도 목록 클래스의 파생에 대한 일러스트레이션은 컬렉션 문서를 참조하세요.

상속 계층 구조

CObject

CMapStringToOb

요구 사항

머리글: afxcoll.h

CMapStringToOb::CMapStringToOb

CString-to-map CObject* 을 생성합니다.

CMapStringToOb(INT_PTR nBlockSize = 10);

매개 변수

nBlockSize
맵을 확장하기 위한 메모리 할당 세분성을 지정합니다.

설명

맵이 커짐에 따라 메모리가 항목 단위 nBlockSize 로 할당됩니다.

다음 표에서는 다음과 유사한 다른 멤버 함수를 CMapStringToOb:: CMapStringToOb보여 줍니다.

클래스 멤버 함수
CMapPtrToPtr CMapPtrToPtr( INT_PTR nBlockSize = 10 );
CMapPtrToWord CMapPtrToWord( INT_PTR nBlockSize = 10 );
CMapStringToPtr CMapStringToPtr( INT_PTR nBlockSize = 10 );
CMapStringToString CMapStringToString( INT_PTR nBlockSize = 10 );
CMapWordToOb CMapWordToOb( INT_PTR nBlockSize = 10 );
CMapWordToPtr MapWordToPtr( INT_PTR nBlockSize = 10 );

예시

CMapStringToOb map(20); // Map on the stack with blocksize of 20

CMapStringToOb *pm = new CMapStringToOb; // Map on the heap
                                         // with default blocksize

모든 컬렉션 예제에 사용되는 클래스 목록을 CAge 참조 CObList::CObList 하세요.

CMapStringToOb::GetCount

맵에 있는 요소 수를 결정합니다.

INT_PTR GetCount() const;

Return Value

이 맵의 요소 수입니다.

설명

다음 표에서는 다음과 유사한 다른 멤버 함수를 CMapStringToOb::GetCount보여 줍니다.

클래스 멤버 함수
CMapPtrToPtr INT_PTR GetCount() const;
CMapPtrToWord INT_PTR GetCount() const;
CMapStringToPtr INT_PTR GetCount() const;
CMapStringToString INT_PTR GetCount() const;
CMapWordToOb INT_PTR GetCount() const;
CMapWordToPtr INT_PTR GetCount() const;

예시

모든 컬렉션 예제에 사용되는 클래스 목록을 CAge 참조 CObList::CObList 하세요.

CMapStringToOb map;

map.SetAt(_T("Bart"), new CAge(13));
map.SetAt(_T("Homer"), new CAge(36));
ASSERT(map.GetCount() == 2);

CMapStringToOb::GetHashTableSize

해시 테이블의 현재 요소 수를 결정합니다.

UINT GetHashTableSize() const;

Return Value

해시 테이블의 요소 수를 반환합니다.

설명

다음 표에서는 다음과 유사한 다른 멤버 함수를 CMapStringToOb::GetHashTableSize보여 줍니다.

클래스 멤버 함수
CMapPtrToPtr UINT GetHashTableSize() const;
CMapPtrToWord UINT GetHashTableSize() const;
CMapStringToPtr UINT GetHashTableSize() const;
CMapStringToString UINT GetHashTableSize() const;
CMapWordToOb UINT GetHashTableSize() const;
CMapWordToPtr UINT GetHashTableSize() const;

CMapStringToOb::GetNextAssoc

맵 요소를 검색 rNextPosition한 다음 맵의 다음 요소를 참조하도록 업데이트합니다 rNextPosition .

void GetNextAssoc(
    POSITION& rNextPosition,
    CString& rKey,
    CObject*& rValue) const;

매개 변수

rNextPosition
이전 GetNextAssoc 또는 GetStartPosition 호출에서 반환된 POSITION 값에 대한 참조를 지정합니다.

rKey
검색된 요소(문자열)의 반환된 키를 지정합니다.

rValue
검색된 요소( CObject 포인터)의 반환된 값을 지정합니다. 이 매개 변수에 대한 자세한 내용은 비고를 참조하세요.

설명

이 함수는 맵의 모든 요소를 반복하는 데 가장 유용합니다. 위치 시퀀스가 반드시 키 값 시퀀스와 동일하지는 않습니다.

검색된 요소가 맵의 마지막 요소인 경우 새 값 rNextPosition 이 로 설정 NULL됩니다.

매개 변수의 rValue 경우 다음 예제와 같이 컴파일러에 필요한 개체 형식 CObject*&으로 캐스팅해야 합니다.

CObject *ob;
map.GetNextAssoc(pos, key, (CObject *&)ob);

템플릿을 기반으로 하는 맵의 GetNextAssoc 경우는 그렇지 않습니다.

다음 표에서는 다음과 유사한 다른 멤버 함수를 CMapStringToOb::GetNextAssoc보여 줍니다.

클래스 멤버 함수
CMapPtrToPtr void GetNextAssoc( POSITION& rNextPosition , void*& rKey , void*& rValue ) const;
CMapPtrToWord void GetNextAssoc( POSITION& rNextPosition , void*& rKey , WORD& rValue ) const;
CMapStringToPtr void GetNextAssoc( POSITION& rNextPosition , CString& rKey , void*& rValue ) const;
CMapStringToString void GetNextAssoc( POSITION& rNextPosition , CString& rKey , CString& rValue ) const;
CMapWordToOb void GetNextAssoc( POSITION& rNextPosition , WORD& rKey , CObject*& rValue ) const;
CMapWordToPtr void GetNextAssoc( POSITION& rNextPosition , WORD& rKey , void*& rValue ) const;

예시

모든 컬렉션 예제에 사용되는 클래스 목록을 CAge 참조 CObList::CObList 하세요.

CMapStringToOb map;
POSITION pos;
CString key;
CAge *pa;

map.SetAt(_T("Bart"), new CAge(13));
map.SetAt(_T("Lisa"), new CAge(11));
map.SetAt(_T("Homer"), new CAge(36));
map.SetAt(_T("Marge"), new CAge(35));
// Iterate through the entire map, dumping both name and age.
for (pos = map.GetStartPosition(); pos != NULL;)
{
   map.GetNextAssoc(pos, key, (CObject *&)pa);
#ifdef _DEBUG
   afxDump << key << _T(" : ") << pa << _T("\n");
#endif
}

이 프로그램의 결과는 다음과 같습니다.

Lisa : a CAge at $4724 11
Marge : a CAge at $47A8 35
Homer : a CAge at $4766 36
Bart : a CAge at $45D4 13

CMapStringToOb::GetSize

지도 요소의 수를 반환합니다.

INT_PTR GetSize() const;

Return Value

맵의 항목 수입니다.

설명

이 메서드를 호출하여 맵의 요소 수를 검색합니다.

다음 표에서는 다음과 유사한 다른 멤버 함수를 CMapStringToOb::GetSize보여 줍니다.

클래스 멤버 함수
CMapPtrToPtr INT_PTR GetSize() const;
CMapPtrToWord INT_PTR GetSize() const;
CMapStringToPtr INT_PTR GetSize() const;
CMapStringToString INT_PTR GetSize() const;
CMapWordToOb INT_PTR GetSize() const;
CMapWordToPtr INT_PTR GetSize() const;

예시

CMapStringToOb map;

map.SetAt(_T("Bart"), new CAge(13));
map.SetAt(_T("Homer"), new CAge(36));
ASSERT(map.GetSize() == 2);

CMapStringToOb::GetStartPosition

호출에 전달할 수 있는 POSITION 값을 반환하여 맵 반복을 시작합니다 GetNextAssoc .

POSITION GetStartPosition() const;

Return Value

POSITION 맵을 반복하기 위한 시작 위치 또는 NULL 맵이 비어 있는 경우를 나타내는 값입니다.

설명

반복 시퀀스는 예측할 수 없습니다. 따라서 "맵의 첫 번째 요소"는 특별한 의미가 없습니다.

다음 표에서는 다음과 유사한 다른 멤버 함수를 CMapStringToOb::GetStartPosition보여 줍니다.

클래스 멤버 함수
CMapPtrToPtr POSITION GetStartPosition() const;
CMapPtrToWord POSITION GetStartPosition() const;
CMapStringToPtr POSITION GetStartPosition() const;
CMapStringToString POSITION GetStartPosition() const;
CMapWordToOb POSITION GetStartPosition() const;
CMapWordToPtr POSITION GetStartPosition() const;

예시

CMapStringToOb::GetNextAssoc에 대한 예를 참조하세요.

CMapStringToOb::HashKey

지정된 키의 해시 값을 계산합니다.

UINT HashKey(LPCTSTR key) const;

매개 변수

key
해시 값을 계산할 키입니다.

Return Value

키의 해시 값

설명

다음 표에서는 다음과 유사한 다른 멤버 함수를 CMapStringToOb::HashKey보여 줍니다.

클래스 멤버 함수
CMapPtrToPtr UINT HashKey( void *key ) const;
CMapPtrToWord UINT HashKey( void *key ) const;
CMapStringToString UINT HashKey( LPCTSTR key ) const;
CMapStringToPtr UINT HashKey( LPCTSTR key ) const;
CMapWordToOb UINT HashKey( WORD key ) const;
CMapWordToPtr UINT HashKey( WORD key ) const;

CMapStringToOb::InitHashTable

해시 테이블을 초기화합니다.

void InitHashTable(
    UINT hashSize,
    BOOL bAllocNow = TRUE);

매개 변수

hashSize
해시 테이블의 항목 수입니다.

bAllocNow
이면 TRUE초기화 시 해시 테이블을 할당하고, 그렇지 않으면 필요할 때 테이블이 할당됩니다.

설명

최상의 성능을 위해 해시 테이블 크기는 소수여야 합니다. 충돌을 최소화하려면 크기가 가장 큰 예상 데이터 집합보다 약 20% 커야 합니다.

다음 표에서는 다음과 유사한 다른 멤버 함수를 CMapStringToOb::InitHashTable보여 줍니다.

클래스 멤버 함수
CMapPtrToPtr void InitHashTable( UINT hashSize , BOOL bAllocNow = TRUE );
CMapPtrToWord void InitHashTable( UINT hashSize , BOOL bAllocNow = TRUE );
CMapStringToString void InitHashTable( UINT hashSize , BOOL bAllocNow = TRUE );
CMapStringToPtr void InitHashTable( UINT hashSize , BOOL bAllocNow = TRUE );
CMapWordToOb void InitHashTable( UINT hashSize , BOOL bAllocNow = TRUE );
CMapWordToPtr void InitHashTable( UINT hashSize , BOOL bAllocNow = TRUE );

CMapStringToOb::IsEmpty

맵이 비어 있는지 여부를 확인합니다.

BOOL IsEmpty() const;

Return Value

이 맵에 요소가 없으면 0이 아닙니다. 그렇지 않으면 0입니다.

예시

RemoveAll에 대한 예를 참조하세요.

설명

다음 표에서는 다음과 유사한 다른 멤버 함수를 CMapStringToOb:: IsEmpty보여 줍니다.

클래스 멤버 함수
CMapPtrToPtr BOOL IsEmpty() const;
CMapPtrToWord BOOL IsEmpty() const;
CMapStringToPtr BOOL IsEmpty() const;
CMapStringToString BOOL IsEmpty() const;
CMapWordToOb BOOL IsEmpty() const;
CMapWordToPtr BOOL IsEmpty() const;

CMapStringToOb::Lookup

값을 기반으로 포인터 CObject 를 반환합니다 CString .

BOOL Lookup(
    LPCTSTR key,
    CObject*& rValue) const;

매개 변수

key
조회할 요소를 식별하는 문자열 키를 지정합니다.

rValue
조회된 요소에서 반환된 값을 지정합니다.

Return Value

요소가 발견된 경우 0이 아닌 경우 그렇지 않으면 0입니다.

설명

Lookup 에서는 해시 알고리즘을 사용하여 정확히 일치하는 키( CString 값)를 사용하여 지도 요소를 빠르게 찾습니다.

다음 표에서는 다음과 유사한 다른 멤버 함수를 CMapStringToOb::LookUp보여 줍니다.

클래스 멤버 함수
CMapPtrToPtr BOOL Lookup( void *key , void*& rValue ) const;
CMapPtrToWord BOOL Lookup( void *key , WORD& rValue ) const;
CMapStringToPtr BOOL Lookup( LPCTSTR key , void*& rValue ) const;
CMapStringToString BOOL Lookup( LPCTSTR key , CString& rValue ) const;
CMapWordToOb BOOL Lookup( WORD key , CObject*& rValue ) const;
CMapWordToPtr BOOL Lookup( WORD key , void*& rValue ) const;

예시

모든 컬렉션 예제에 사용되는 클래스 목록을 CAge 참조 CObList::CObList 하세요.

CMapStringToOb map;
CAge *pa;

map.SetAt(_T("Bart"), new CAge(13));
map.SetAt(_T("Lisa"), new CAge(11));
map.SetAt(_T("Homer"), new CAge(36));
map.SetAt(_T("Marge"), new CAge(35));
ASSERT(map.Lookup(_T("Lisa"), (CObject *&)pa)); // Is "Lisa" in the map?
ASSERT(*pa == CAge(11));                        // Is she 11?

CMapStringToOb::LookupKey

지정된 키 값과 연결된 키에 대한 참조를 반환합니다.

BOOL LookupKey(
    LPCTSTR key,
    LPCTSTR& rKey) const;

매개 변수

key
조회할 요소를 식별하는 문자열 키를 지정합니다.

rKey
연결된 키에 대한 참조입니다.

Return Value

키가 발견된 경우 0이 아닌 경우 그렇지 않으면 0입니다.

설명

연결된 요소를 맵에서 제거한 후 또는 지도가 제거된 후에 사용하는 경우 키에 대한 참조를 사용하는 것이 안전하지 않습니다.

다음 표에서는 다음과 유사한 다른 멤버 함수를 CMapStringToOb:: LookupKey보여 줍니다.

클래스 멤버 함수
CMapStringToPtr BOOL LookupKey( LPCTSTR key , LPCTSTR& rKey ) const;
CMapStringToString BOOL LookupKey( LPCTSTR key , LPCTSTR& rKey ) const;

CMapStringToOb::operator [ ]

멤버 함수를 편리하게 대체합니다 SetAt .

CObject*& operator[ ](lpctstr key);

Return Value

개체에 대한 포인터에 대한 CObject 참조이거나 NULL 지도가 비어 있거나 key 범위를 벗어난 경우입니다.

설명

따라서 할당 문( l-value)의 왼쪽에서만 사용할 수 있습니다. 지정된 키를 가진 map 요소가 없으면 새 요소가 만들어집니다.

지도에서 키를 찾을 수 없을 가능성이 있으므로 이 연산자에 해당하는 "오른쪽"(r-value)은 없습니다. 요소 검색에 Lookup 멤버 함수를 사용합니다.

다음 표에서는 다음과 유사한 다른 멤버 함수를 CMapStringToOb::operator []보여 줍니다.

클래스 멤버 함수
CMapPtrToPtr void*& operator[](void *key );
CMapPtrToWord WORD& operator[](void *key );
CMapStringToPtr void*& operator[](lpctstr key );
CMapStringToString CString& operator[](lpctstr key );
CMapWordToOb CObject*& operator[](word key );
CMapWordToPtr void*& operator[](word key );

예시

모든 컬렉션 예제에 사용되는 클래스 목록을 CAge 참조 CObList::CObList 하세요.

CMapStringToOb map;

map[_T("Bart")] = new CAge(13);
map[_T("Lisa")] = new CAge(11);
#ifdef _DEBUG
afxDump.SetDepth(1);
afxDump << _T("Operator [] example: ") << &map << _T("\n");
#endif

이 프로그램의 결과는 다음과 같습니다.

Operator [] example: A CMapStringToOb with 2 elements
[Lisa] = a CAge at $4A02 11
[Bart] = a CAge at $497E 13

CMapStringToOb::RemoveAll

이 맵에서 모든 요소를 제거하고 키 개체를 CString 제거합니다.

void RemoveAll();

설명

각 키에서 참조하는 개체는 CObject 제거되지 않습니다. RemoveAll 참조된 CObject 개체가 제거되지 않도록 하려면 이 함수로 인해 메모리 누수가 발생할 수 있습니다.

맵이 이미 비어 있는 경우 함수가 올바르게 작동합니다.

다음 표에서는 다음과 유사한 다른 멤버 함수를 CMapStringToOb::RemoveAll보여 줍니다.

클래스 멤버 함수
CMapPtrToPtr void RemoveAll();
CMapPtrToWord void RemoveAll();
CMapStringToPtr void RemoveAll();
CMapStringToString void RemoveAll();
CMapWordToOb void RemoveAll();
CMapWordToPtr void RemoveAll();

예시

모든 컬렉션 예제에 사용되는 클래스 목록을 CAge 참조 CObList::CObList 하세요.

{
   CMapStringToOb map;

   CAge age1(13); // Two objects on the stack
   CAge age2(36);
   map.SetAt(_T("Bart"), &age1);
   map.SetAt(_T("Homer"), &age2);
   ASSERT(map.GetCount() == 2);
   map.RemoveAll(); // CObject pointers removed; objects not removed.
   ASSERT(map.GetCount() == 0);
   ASSERT(map.IsEmpty());
} // The two CAge objects are deleted when they go out of scope.

CMapStringToOb::RemoveKey

제공된 키에 해당하는 맵 항목을 조회합니다. 키를 찾은 경우 항목을 제거합니다.

BOOL RemoveKey(LPCTSTR key);

매개 변수

key
지도 조회에 사용되는 문자열을 지정합니다.

Return Value

항목이 발견되고 성공적으로 제거된 경우 0이 아닌 경우 그렇지 않으면 0입니다.

설명

개체가 다른 곳에서 삭제되지 않으면 CObject 메모리 누수의 원인이 될 수 있습니다.

다음 표에서는 다음과 유사한 다른 멤버 함수를 CMapStringToOb::RemoveKey보여 줍니다.

클래스 멤버 함수
CMapPtrToPtr BOOL RemoveKey( void *key );
CMapPtrToWord BOOL RemoveKey( void *key );
CMapStringToPtr BOOL RemoveKey( LPCTSTR key );
CMapStringToString BOOL RemoveKey( LPCTSTR key );
CMapWordToOb BOOL RemoveKey( WORD key );
CMapWordToPtr BOOL RemoveKey( WORD key );

예시

모든 컬렉션 예제에 사용되는 클래스 목록을 CAge 참조 CObList::CObList 하세요.

CMapStringToOb map;

map.SetAt(_T("Bart"), new CAge(13));
map.SetAt(_T("Lisa"), new CAge(11));
map.SetAt(_T("Homer"), new CAge(36));
map.SetAt(_T("Marge"), new CAge(35));
map.RemoveKey(_T("Lisa")); // Memory leak: CAge object not
                           // deleted.
#ifdef _DEBUG
afxDump.SetDepth(1);
afxDump << _T("RemoveKey example: ") << &map << _T("\n");
#endif

이 프로그램의 결과는 다음과 같습니다.

RemoveKey example: A CMapStringToOb with 3 elements
[Marge] = a CAge at $49A0 35
[Homer] = a CAge at $495E 36
[Bart] = a CAge at $4634 13

CMapStringToOb::SetAt

기본은 맵에 요소를 삽입하는 것을 의미합니다.

void SetAt(
    LPCTSTR key,
    CObject* newValue);

매개 변수

key
새 요소의 키인 문자열을 지정합니다.

newValue
새 요소의 CObject 값인 포인터를 지정합니다.

설명

첫째, 키를 조회합니다. 키를 찾은 경우 해당 값이 변경됩니다. 그렇지 않으면 새 키-값 요소가 만들어집니다.

다음 표에서는 다음과 유사한 다른 멤버 함수를 CMapStringToOb::SetAt보여 줍니다.

클래스 멤버 함수
CMapPtrToPtr void SetAt( void *key , void *newValue );
CMapPtrToWord void SetAt( void *key , WORD newValue );
CMapStringToPtr void SetAt( LPCTSTR key , void *newValue );
CMapStringToString void SetAt( LPCTSTR key , LPCTSTR newValue );
CMapWordToOb void SetAt( WORD key , CObject *newValue );
CMapWordToPtr void SetAt( WORD key , void *newValue );

예시

모든 컬렉션 예제에 사용되는 클래스 목록을 CAge 참조 CObList::CObList 하세요.

CMapStringToOb map;
CAge *pa;

map.SetAt(_T("Bart"), new CAge(13));
map.SetAt(_T("Lisa"), new CAge(11)); // Map contains 2
                                     // elements.
#ifdef _DEBUG
afxDump.SetDepth(1);
afxDump << _T("before Lisa's birthday: ") << &map << _T("\n");
#endif
if (map.Lookup(_T("Lisa"), (CObject *&)pa))
{ // CAge 12 pointer replaces CAge 11 pointer.
   map.SetAt(_T("Lisa"), new CAge(12));
   delete pa; // Must delete CAge 11 to avoid memory leak.
}
#ifdef _DEBUG
afxDump << _T("after Lisa's birthday: ") << &map << _T("\n");
#endif

이 프로그램의 결과는 다음과 같습니다.

before Lisa's birthday: A CMapStringToOb with 2 elements
[Lisa] = a CAge at $493C 11
[Bart] = a CAge at $4654 13
after Lisa's birthday: A CMapStringToOb with 2 elements
[Lisa] = a CAge at $49C0 12
[Bart] = a CAge at $4654 13

참고 항목

CObject 클래스
계층 구조 차트
CMapPtrToPtr 수업
CMapPtrToWord 수업
CMapStringToPtr 수업
CMapStringToString 수업
CMapWordToOb 수업
CMapWordToPtr 수업