Open tgparkk opened 2 months ago
example1
#include <afx.h> // CString 헤더 파일
#include <unordered_set>
#include <iostream>
// 해시 함수와 동일성 비교 연산자를 구현한 CStringHash 클래스
class CStringHash {
public:
size_t operator()(const CString& str) const {
// CString을 const char*로 변환하여 해시 값을 계산
return std::hash<std::string>()(CT2CA(str));
}
};
class CStringEqual {
public:
bool operator()(const CString& str1, const CString& str2) const {
// CString을 const char*로 변환하여 동일성 비교
return (str1.Compare(str2) == 0);
}
};
int main() {
// std::unordered_set 생성
std::unordered_set<CString, CStringHash, CStringEqual> mySet;
// CString을 std::unordered_set에 삽입
CString cstr1 = _T("apple");
mySet.insert(cstr1);
CString cstr2 = _T("banana");
mySet.insert(cstr2);
CString cstr3 = _T("orange");
mySet.insert(cstr3);
// 모든 값을 출력
for (const auto& value : mySet) {
std::wcout << value.GetString() << std::endl;
}
return 0;
}
example2
#include <afx.h> // CString 헤더 파일
#include <unordered_set>
#include <iostream>
// 해시 함수 구현
struct CStringHash {
size_t operator()(const CString& str) const {
// CString 내부 문자열을 직접 해싱
const wchar_t* data = str.GetString();
size_t hash = 5381;
wchar_t ch;
while ((ch = *data++)) {
hash = ((hash << 5) + hash) + ch; // 해시 함수는 일반적으로 이러한 형태를 가짐
}
return hash;
}
};
// 동일성 비교 연산자 구현
struct CStringEqual {
bool operator()(const CString& str1, const CString& str2) const {
return (str1 == str2);
}
};
int main() {
// std::unordered_set 생성
std::unordered_set<CString, CStringHash, CStringEqual> mySet;
// CString을 std::unordered_set에 삽입
CString cstr1 = _T("apple");
mySet.insert(cstr1);
CString cstr2 = _T("banana");
mySet.insert(cstr2);
CString cstr3 = _T("orange");
mySet.insert(cstr3);
// 모든 값을 출력
for (const auto& value : mySet) {
std::wcout << value.GetString() << std::endl;
}
return 0;
}
알겠습니다. MFC의 CString 클래스는 문자열을 다루는 특수한 구조체로, 표준 라이브러리의 std::unordered_set과 호환되지 않습니다. 그러나 우회적으로 CString을 std::unordered_set과 함께 사용할 수 있는 방법이 있습니다.