|
만해 님이 쓰신 글 :
: 안녕하세요 만해입니다
:
: 추석 잘 보내셨는지요
:
: 질문의 내용은요
:
: 간단한건데요
:
: 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에 넣고 싶은데 어떻게 해야 하는지 모르겟네요
:
: 그냥 일반 자료형은 예제나 책에 나와있는데
:
: 구조체는 잘 모르겠네요
:
: 아시는분 좀 가르켜 주세요
:
: 그럼 이만~
|