2016-09-30 2 views
0

Ich versuche, ein Element aus einer Karte in einer for-Schleife zu bekommen. Nach dem Beispiel auf cppreference Ich versuche dies:`[]` Operator führt zu kompilieren Fehler auf Karte

#include <iostream> 
#include <map> 

using namespace std; 

int main() 
{ 
    map<int, int> mapping; 

    mapping.insert(pair<int, int>(11,1)); 
    mapping.insert(pair<int, int>(12,2)); 
    mapping.insert(pair<int, int>(13,3)); 

    for (const auto &it : mapping) 
     mapping[it]++; 


    cout << "array: "; 
    for (const auto &it : mapping) 
     cout << it.second << " "; 

    return 0; 
} 

Welche der folgenden Kompilierungsfehler mit gcc gibt:

main.cpp: In function 'int main()': 
main.cpp:15:16: error: no match for 'operator[]' (operand types are 'std::map<int, int>' and 'const std::pair<const int, int>') 
     mapping[it]++; 

Wenn ich es richtig das Problem zu verstehen ist, dass die auto zu einem std::pair<const int, int> gelöst ist, für die nein [] Operator ist definiert. Ich habe mich gefragt, ob es einen Weg gibt, dies zur Arbeit zu bringen.

Siehe für den vollständigen Übersetzungsfehler here

+0

Im Gegensatz zu Sprachen mit ähnlicher Syntax wie C++ ist es nicht der Schlüssel. Stattdessen ist es das tatsächliche Paar in der Karte. –

Antwort

6

Wie wäre es nur

for (auto &it : mapping) 
    ++it.second; 

für die erste Schleife?

+0

Das hat das Problem gelöst. Vielen Dank. – Stereo

Verwandte Themen