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

C/C++ Q/A
[1246] Re:[만해] STL에서 구조체 정렬에 대해
김백일 [cedar] 5712 읽음    2002-09-23 14:54
만해 님이 쓰신 글 :
: 안녕하세요 만해입니다
:
: 추석 잘 보내셨는지요
:
: 질문의 내용은요
:
: 간단한건데요
:
: STL에서 그냥 보통 자료형(int,float,string)들은 그냥 sort를 이용할수 있는데
:
: 만약 사용자 정의 자료형 예를 들면 구조체같은 자료형을 정렬 하게 할려면 어떻게 해야 하는지요?
:
: 그리고 구조체내의 변수 하나 하나에 대해서 정렬을 해야 할때는 어떻게 해야 하는지
:
: 좀 가르켜 주세요
:
: typedef MyInfo {
:   int weight;
:   int age;
:   string character;};

구조체 정의가 틀렸네요. typedef이 아니라 그냥 struct를 쓰면 됩니다.

struct MyInfo {
   int weight;
   int age;
   string character;
};

이와 같은 구조체나 클래스를 비교하려면 비교 함수 객체를 정의해야 합니다.

age 순으로 정렬하는 비교 함수 객체는 다음과 같이 정의하면 됩니다.

struct AgeLess {
   bool operator()(const MyInfo& lhs, const MyInfo& rhs) const
   { return lhs.age < rhs.age; }
}

weight나 character의 경우도 마찬가지로 정의하면 됩니다.


: MyInfo Infos[10];
:
: // Infos 내용 할당 부분
:
: vector <MyInfo> vInfo;
:
: vInfo.copy(Infos[0],Infos[9]);
:
: sort(vInfo.begin(), vInfo.end() , 여기에 해당 구조체중 원하는 변수를 설정);

age 순으로 정렬한다면,

sort(vInfo.begin(), vInfo.end(), AgeLess());

weight나 character도 마찬가지로 하면 됩니다.

참고로, STL 알고리듬은 vector와 같은 STL 컨테이너가 아니라, C 배열에도 적용할 수 있습니다.

sort(&Infos[0], &Infos[9], AgeLess()); // 보통 이렇게 쓰는 경우가 더 많더군요.
또는
sort(Infos, Infos+9, AgeLess());        // 좀 드물게 쓰는 방법
와 같이 배열의 주소를 sort 알고리듬의 인자로 넘겨주면 됩니다.

: 그 변수만으로 정렬된 결과를 vInfo에 넣고 싶은데 어떻게 해야 하는지 모르겟네요
:
: 그냥 일반 자료형은 예제나 책에 나와있는데
:
: 구조체는 잘 모르겠네요
:
: 아시는분 좀 가르켜 주세요
:
: 그럼 이만~

+ -

관련 글 리스트
1235 [만해] STL에서 구조체 정렬에 대해 만해 2219 2002/09/23
1246     Re:[만해] STL에서 구조체 정렬에 대해 김백일 5712 2002/09/23
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.