|
안녕하세요 만해 입니다.
조금 이른 시간이네요
후후~
typedef struct {
AnsiString URL;
long Id;
long Depth;
bool IsVisited;
bool IsDuplicate;
}TTreeData;
void __fastcall TMain::ProcessUrl(void)
{// LinkString의 값을 가져와서 이미 저장되어 있는 TempStringList에
// 있는지 체크 있으면 제거 없으면 추가.
int i = 0;
int j = 0;
TTreeData* tData;
for ( i = 0 ; i < LinkString->Count ; i++ )
{
TTreeData * pData = (TTreeData*)LinkString->Items[i];
pData->URL = Make_Regular_Url(pData->URL);
AnsiString tmp = pData->URL;
for ( j = 0 ; j < TempStringList->Count ; j++ )
{
tData = (TTreeData*)(TempStringList->Items[j]);
tData->URL = Make_Regular_Url(tData->URL);
AnsiString tTmp = tData->URL;
if ( tTmp == tmp )
break;
}
if ( j >= TempStringList->Count )
// j >= TempStringList->Count 즉 중복되는 값이 없다면
pData->IsDuplicate = false;
else
{
pData->IsDuplicate = true;
pData->Id = tData->Id;
pData->Depth = tData->Depth;
}
TempStringList->Add(pData); // TempStringList에 추가.
}
}
위의 소스는 예전의 조금 무식한 소스고요
밑의 소소는 페페루님의 조언으로 고친 MAP을 이용한 소스인데요
정말 하루 죙일 이거 잡고 있었는네요 쿠쿠~
void __fastcall TMain::ProcessUrl(void)
{// LinkString의 값을 가져와서 이미 저장되어 있는 TempStringList에
// 있는지 체크 있으면 제거 없으면 추가.
int i = 0;
int j = 0;
std::map<AnsiString, int> freq;
TTreeData* tData;
for ( i = 0 ; i < TempStringList->Count ; i++ )
{
TTreeData * pData = (TTreeData*)TempStringList->Items[i];
pData->URL = Make_Regular_Url(pData->URL);
freq.insert(std::map<AnsiString,int>::value_type(pData->URL,i));
}
std::map<AnsiString,int>::iterator itr;
for ( j = 0 ; j < LinkString->Count ; j++ )
{
tData = (TTreeData*)(LinkString->Items[j]);
tData->URL = Make_Regular_Url(tData->URL);
int ICnt=freq.size();
itr = freq.find(tData->URL);
if ( itr->second >= 0 )
{
tData->IsDuplicate = true;
TTreeData * pData = (TTreeData*)TempStringList->Items[itr->second];
pData->IsDuplicate = true;
tData->Id = pData->Id;
tData->Depth = pData->Depth;
}
else
{
TempStringList->Add(tData);
freq.insert(std::map<AnsiString,int>::value_type(tData->URL,ICnt++));
}
}
}
그런데 제가 STL이 어찌 돌아 가는지를 모르니깐
위의 소스하고 밑의 소스가 같은 역활을 하는지 잘 모르겠네요
그리고 소스상의 문제점 같은거 있음 좀 알려 주세요
부탁 드립니다.~
날밤깠네요 쩝~
|