글 수 429
void CCustomDic2::SetKey(LPCSTR JpnWord, LPCSTR KorWord)
{
map<UINT,struct DicWord> EmptyMap;
struct DicWord TempWord;
map<size_t,UINT>::iterator iterBook;
TempWord.WordLen = strlen(KorWord);
TempWord.WordN = WordN++;
UINT Hash=MakeStringHash(JpnWord);
size_t IndexChar=TempWord.WordLen*65536+JpnWord[1]; //길이 * 65536 + 2번째 글자로 한차례 걸러내기
UINT ValuePointer=0;
iterBook = KeyIndex.find(IndexChar);
if(iterBook==KeyIndex.end()){
//값이 들어있지 않다면
KeyIndex[IndexChar]=BookN;
KeyBook.push_back(EmptyMap);
//새 맵을 집어넣는다.
ValuePointer=BookN++;
}
else{
//값이 들어있다면
ValuePointer=iterBook->second;
}
KeyBook[ValuePointer][Hash]=TempWord;
ValueList.push_back(KorWord);
//삽입
}
헤더에는
map<size_t, UINT> KeyIndex;
vector<map<UINT,struct DicWord>> KeyBook;
vector<string> ValueList;
UINT WordN;
UINT BookN;
으로 선언되어 있습니다.
{
map<UINT,struct DicWord> EmptyMap;
struct DicWord TempWord;
map<size_t,UINT>::iterator iterBook;
TempWord.WordLen = strlen(KorWord);
TempWord.WordN = WordN++;
UINT Hash=MakeStringHash(JpnWord);
size_t IndexChar=TempWord.WordLen*65536+JpnWord[1]; //길이 * 65536 + 2번째 글자로 한차례 걸러내기
UINT ValuePointer=0;
iterBook = KeyIndex.find(IndexChar);
if(iterBook==KeyIndex.end()){
//값이 들어있지 않다면
KeyIndex[IndexChar]=BookN;
KeyBook.push_back(EmptyMap);
//새 맵을 집어넣는다.
ValuePointer=BookN++;
}
else{
//값이 들어있다면
ValuePointer=iterBook->second;
}
KeyBook[ValuePointer][Hash]=TempWord;
ValueList.push_back(KorWord);
//삽입
}
헤더에는
map<size_t, UINT> KeyIndex;
vector<map<UINT,struct DicWord>> KeyBook;
vector<string> ValueList;
UINT WordN;
UINT BookN;
으로 선언되어 있습니다.
뭔가 대충은 괜찮아 보입니다만.. 테스트를 잘 해보시기 바랍니다.
저도 눈과 머리로 시뮬레이션해서 결과를 도출시키는 데에는 한계가 있고 종종 틀리니까 말이죠.
제가 직접 코딩하는 프로그램도 그런데, 다른 분의 코드를 딱 보고 에러가 있는지 없는지 확인하기는 더 어렵습니다.
결론은.. 로그파일을 만들어 뽑아보던지 테스트 문자를 넣어보던지 하면서 에러를 직접 잡으시기 바랍니다;;; (퍼억)