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
[15137] Re:이 경우에는 map이 아니라 set을 써야합니다.
만해 [greenuri] 1080 읽음    2002-01-30 16:38
김백일 님이 쓰신 글 :
: 님의 소스를 보면 기존 TList 자료구조(ListString, TempStringList)를 그대로 두고
: map에는 그 인덱스만 저장하는 구조로 되어있는데,
: 별로 좋은 방법은 아니군요.
: 기존 자료구조를 STL 기반으로 완전히 뜯어 고치시는 게 나을 겁니다.
:
: 그리고 이 경우는 별도의 키 값으로 자료를 접근하는게 아니고,
: 단지, 중복 없이 TTreeData를 저장하려는 경우이므로 map이 아니라 set을 사용해야 합니다.
: (int, char, enum 만 저장할 수 있는 VCL의 Set과는 전혀 다른 겁니다.)
: 즉, 중복된 값은 절대 삽입되지 않습니다.
:
: TTreeData 구조체 대신, 생성자와 멤버 변수(URL, id, Depth 등)를
: 수정하는 get/set 멤버 함수들을 완전히 정의한 클래스로 만드시고요,
: set에 TTreeData 클래스 자체(클래스의 포인터가 아닙니다.)를
: 통째로 저장하는 편이 간단할 겁니다.
: 물론 set은 sequence associative container이므로
: 두 TTreeData의 순서(less-than 연산)를 정의하는 함수자(functor)도 정의해야 합니다.
:
: template <typename Key, 
:           typename Compare = less<Key>, // 이 함수 객체를 정의해야 합니다.
:           class Allocator = allocator<pair<const Key, T> > >
:
: 그리고 한 가지 더 코멘트하자면,
: 님의 소스에서 맵을 정의하실 때 다음과 같이 하셨는데요...
:
: : std::map<AnsiString, int> freq;
:
: map의 키 값의 타입으로는 Ansi C++ 라이브러리에서 less-than연산이 정의되어 있어야 합니다.
: 만약 AnsiString처럼 정의되지 않은 타입을 쓰려면 set에서와 같이 직접 정의를 해야 합니다.
:
: 이것은 map의 template parameter가 다음과 같이 정의되어 있기 때문입니다.
:
: template <typename Key, typename T,
:           typename Compare = less<Key>, // 이 함수 객체를 정의해야 합니다.
:           class Allocator = allocator<pair<const Key, T> > >
:
: 차라리 AnsiString을 Ansi C++ 라이브러리의 string 타입으로 변환하는 것이 훨씬 편합니다.
: 물론 변환은 양쪽 다 c_str() 멤버 함수를 써서 char* 타입으로 하면 됩니다.
:
: string str1 = "std_string";
: AnsiString vclStr1 = "AnsiString";
: string str2 = vclStr1.c_str();
: AnsiString vclStr2 = str.c_str();
:
: STL을 쓰실 때는 AnsiString 보다는 string을 쓰는 편이 여러모로 편합니다!
:
:

님의 답변 감사합니다.

아직 제가 STL을 몰라서 그렇녜요

좀 있음 나올 국문판 책으로 기초를 쌓고 난후 다시 저쪽 루틴을 고칠까 합니다.

지금은 나머지 루틴을 고칠려고 합니다.

그리고 오늘 알게된

TODO List를 코드 전체에 쫙 뿌리고요~

아직 기초도 안되어 있으님 쩝~

님의 조언에 다시 한번 감사 드립니다.

+ -

관련 글 리스트
15117 [만해] STL의 Map에서 Find 사용법을 잘 모르곘네요 ~ 만해 1900 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.