3개의 댓글이 있습니다.
-
-
dgoon -
const A 와 A 는 조금 관계가 있는 '다른 타입' 이라고 생각해보면 어떨까요. sort 가 사용하는 비교 함수는 변경 불가능한 레퍼런스를 받아 사용하는데, 변경 가능한 레퍼런스를 받는 함수를 넘겼기 때문에 싫어하게 됩니다. 못바꾸는 애만 받아야 하는데, 바꿀 수 있는 애를 받아서 낭패! 라는 느낌일까요 ... 비교 함수가 보는 엘리먼트를 바꿀 수 있는 가능성을 애초부터 제거하는 것이 골치아픈 버그의 가능성을 막을 수 있기 때문에(그리고 상식에 어긋나지 않고) 저런 모양으로 되어 있습니다.
아마 const T & a 말고 T a 로 해도 될 겁니다. (어느쪽이든 원본(?)의 변화가 없기 때문에)
자세한건 const in C++ 같은 키워드로 검색해보시면 우왕굿.
... 그런데 VS2008 에선 저게 빌드가 되는군요. 몰랐네요.
14년 전 link
-
-
정회원 권한이 있어야 커멘트를 다실 수 있습니다. 정회원이 되시려면 온라인 저지에서 5문제 이상을 푸시고, 가입 후 7일 이상이 지나셔야 합니다. 현재 문제를 푸셨습니다.
Leie
/home/controller/submissions/22299/submission.cpp: In function 'void input()': /home/controller/submissions/22299/submission.cpp:33: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result /home/controller/submissions/22299/submission.cpp:36: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result /home/controller/submissions/22299/submission.cpp: In function 'int main()': /home/controller/submissions/22299/submission.cpp:89: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result /usr/include/c++/4.3/bits/stl_algo.h: In function 'const _Tp& std::__median(const _Tp&, const _Tp&, const _Tp&, _Compare) [with _Tp = Doll, _Compare = bool (*)(Doll&, Doll&)]': /usr/include/c++/4.3/bits/stl_algo.h:1952: instantiated from 'void std::__introsort_loop(_RandomAccessIterator, _RandomAccessIterator, _Size, _Compare) [with _RandomAccessIterator = Doll*, _Size = int, _ (... omitted ..)
에러 메시지가 다음과 같이 뜨고 있는데, 어떤 부분이 에러가 나는 것인지 잘 모르겠습니다. VS2008에선 컴파일 에러 없이 잘 돌아가고 있습니다.
제 코드에서는 다음과 같이 사용하였습니다.
struct Doll in[100001];
static bool compare(struct Doll &a, struct Doll &b){
return a.value < b.value;
}
static bool compare2(struct Doll &a, struct Doll &b){
return a.index < b.index;
}
...
sort(in, in+N, compare);
....
14년 전