Ich versuche, den maximalen Wert eines std::map
zurückzugeben.Warum kann der C++ - Compiler nicht kompiliert werden, wenn in einem Parameter kein const verwendet wird?
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;
}
Wenn ich pred
wie folgt definieren, es funktioniert:
bool pred(const pair<int,int>& lhs, const pair<int,int>& rhs){
return lhs.second < rhs.second;
}
Während dies nicht funktioniert:
bool pred(pair<int,int>& lhs, pair<int,int>& rhs){
return lhs.second < rhs.second;
}
Ich verstehe nicht, warum const
es erlaubt zu arbeiten.
Ändern Sie die Parameter in 'pair &' und versuchen Sie es erneut. Der Kartenschlüssel ist offensichtlich ein "const". Sie können den Schlüssel eines bestimmten Werts in der Karte natürlich nicht ändern. –
Yah, aber ich versuche nichts zu ändern. Warum brauche ich die Konstante? – sbryan1
Sie brauchen die const, weil Sie in keinem Teil des Programms const legal cast oder konvertieren können. das heißt const Korrektheit, in C++ gehört es zur Typensicherheit. Wenn Sie versuchen, const-Objekte an eine Funktion zu übergeben, die eine nicht konstante Referenz verwendet, ist dies ein Kompilierungsfehler. const-Objekte können nicht an nicht konstante Referenzen gebunden werden. –