저좀 도와주세요.. C구조체 정렬
![익명 사용자의 이미지 익명 사용자의 이미지](/files/bluemarine_logo.png)
글쓴이: 익명 사용자 / 작성시간: 토, 2011/08/20 - 12:37오전
공부하고 있는 학생인데요...여기 이런거 올려도 될지..
struct process {
int id, gp, sp, sum;
bool operator()(const process &a, const process &b) {
return a.sum < b.sum;
}
}
main()
{
....
....
std::sort(p, p+n, process());
....
....
}
저기서 bool operator 부분 설명좀 해주세요..
무슨 원리 인지.. ?
정렬하는 것은 알겠는데 기준이 어떻게 되는건지..?
다른데 검색해도 명확한 설명이 없네요?
Forums:
C 아니고 C++에 대한 질문이네요. C++
C 아니고 C++에 대한 질문이네요. C++ operator와 에 sort에 대해 구글에서 찾아보셔요.
세벌 https://sebuls.blogspot.kr/
std::sort 알고리즘은 (대부분의 알고리즘
std::sort 알고리즘은 (대부분의 알고리즘 처럼) key comparison 알고리즘입니다. 그래서, 정렬하고자 하는 sequence의 각 원소를 비교할 수 있는 방법이 있어야 하겠죠. primitive data type은 이미 "<" 가 정의 되어 있죠. 따라서 추가적인 operator를 만들 필요가 없습니다.
그런데 정의하신 process는 사용자가 정의한 타입이므로 이 타입을 비교하기 위해서 이 타입을 정의한 사람이 "<" 를 정의하고 sort 내부에서 각 sequence를 사용자가 정의해준 "<"를 이용하여 비교합니다.
그리고 위의 코드에 문제가 하나 있군요.
operator <를 class member로 구현할 경우에는 friend keyword가 필요합니다. 아니면 그냥 struct process 밖으로 빼내도 되고요.
c++의 class X 멤버함수의 첫번째 인자는 const X* this가 암묵적으로 들어오므로 위와같이 정의 하시면 operator<(const process* this, const process&a, const process& b)로 컴파일러가 인식합니다. 따라서 binary operator가 아니라고 에러를 만들어 내겠죠.
Life rushes on, we are distracted
감사합니다..
이해는 잘못하겠지만...
저기 관련된 것은 무엇을 봐야 할까요?
검색해도 잘 모르겠네여..
아니면 책이라도..
operator overloading은 c++ 문법에
operator overloading은 c++ 문법에 대한 내용이고요.
std::sort는 STL(Standard Template Library)에 관한 이야기 입니다. (최근 표준은 더 이상 STL이라는 말을 사용하지 않겠지만 여하튼 나와있는 책을 기준으로 말하자면 STL에 관한 책을 찾아야 합니다.)
책을 권하기가 만만치 않네요. 한 권만 권해볼께요.
The C++ programming language :
바이블입니다. 이 책은 C++ 문법, STL 그리고 그 이상의 내용을 담고 있습니다. 여러 번 정독해도 계속 새로운 좋은 책.
단점은 좀 길게 집중할 시간이 필요하다는 것.
여담으로, C++는 다른 언어보다 훨씬 더 언어 자체가 공부할 거리가 많습니다. 적당히 수준을 정해서 언어에만 너무 매이지 말고 풀고자하는 문제에 집중해야 좋은 프로그래머가 되는데 도움이 될겁니다.
Life rushes on, we are distracted
감사합니다
정말 감사합니다.
안그래도 STL공부중이었는데..
콕 찝어서 말씀해주시니 감사합니다.
프로그래머의 길은 멀고도 험하네요
댓글 달기