std::map
の最大値を返そうとしています。パラメータで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;
}
私はこのようなpred
を定義した場合、それが動作します:
bool pred(const pair<int,int>& lhs, const pair<int,int>& rhs){
return lhs.second < rhs.second;
}
一方、これは動作しません:
bool pred(pair<int,int>& lhs, pair<int,int>& rhs){
return lhs.second < rhs.second;
}
const
はそれを動作させることができますなぜ私は理解していません。
パラメータを 'pair&'に変更してもう一度やり直してください。マップキーは明らかに 'const'です。マップ上の特定の値のキーは、オンザフライで変更することはできません。 –
私は何も変えようとしていません。なぜconstが必要なのですか? – sbryan1
constを必要とするのは、プログラムのどの部分でもconstをキャストまたは変換できないためです。それはconstの正確さと呼ばれ、C++では型安全性の一部です。 const以外の参照を取る関数にconstを渡そうとすると、コンパイルエラーです。 constのものは非const参照にバインドできません。 –