std::map
의 최대 값을 반환하려고합니다. 나는이 같은 pred
을 정의하면const에서 매개 변수를 사용하지 않을 때 C++ 컴파일러가 컴파일되지 않는 이유는 무엇입니까?
int main() {
int N;
cin >> N;
map<int,int > m;
while(N--) {
int x; cin >> x;
m[x]++;
}
cout << max_element(m.begin(), m.end(), pred)->first;
return 0;
}
, 그것을 작동 :
bool pred(const pair<int,int>& lhs, const pair<int,int>& rhs){
return lhs.second < rhs.second;
}
을이 작동하지 않습니다, 반면 : const
가 작동 할 수 있습니다 왜 이해가 안
bool pred(pair<int,int>& lhs, pair<int,int>& rhs){
return lhs.second < rhs.second;
}
.
매개 변수를'pair &'로 변경하고 다시 시도하십시오. 지도 키는 분명히 'const'입니다. 분명히 맵에서 특정 값의 키를 변경할 수는 없습니다. –
그래,하지만 아무것도 바꾸려고 하는게 아니야. 왜 const가 필요한가요? – sbryan1
당신은 합법적으로 프로그램의 어떤 부분에서 const를 캐스팅하거나 변환 할 수 없으므로 const가 필요합니다. 그것은 const 정확성이라 불리우며 C++에서는 타입 안전의 일부입니다. const가 아닌 참조를 취하는 함수에 const 일을 전달하려고하면 컴파일 오류가 발생합니다. const 일은 비 const 참조에 바인딩 할 수 없습니다. –