C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[15117] [만해] STL의 Map에서 Find 사용법을 잘 모르곘네요 ~
만해 [greenuri] 1899 읽음    2002-01-30 04:45
안녕하세요 만해 입니다.

조금 이른 시간이네요

후후~

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이 어찌 돌아 가는지를 모르니깐

위의 소스하고 밑의 소스가 같은 역활을 하는지 잘 모르겠네요

그리고 소스상의 문제점 같은거 있음 좀 알려 주세요

부탁 드립니다.~

날밤깠네요 쩝~

+ -

관련 글 리스트
15117 [만해] STL의 Map에서 Find 사용법을 잘 모르곘네요 ~ 만해 1899 2002/01/30
15128     이 경우에는 map이 아니라 set을 써야합니다. 김백일 1931 2002/01/30
15137         Re:이 경우에는 map이 아니라 set을 써야합니다. 만해 1080 2002/01/30
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.