2017-05-29 2 views
0

Ich habe einen Code, wo ich eine Karte rückwärts in C++ iterieren. Bei n Paaren in der Karte werden manchmal n Paare, manchmal n-1 Paare gedruckt. für Testfallumgekehrte Iteration der Karte in C++ fehlt das erste Element

4 2  
2 1 
3 5 
2 3 
1 5 

druckt 4 hallo ist, für die

4 1 
0 2 
0 3 
3 5 
0 6 

Mein Code nächsten Fall 3 hallo:

include cmath, cstdio, vector, iostream, map, algorithm, using namespace std; 

int main() { 
    int n,f; 
    cin >> n >> f; 
    int k[n],l[n],dif[n]; 
    map<int,int> m; 
    map<int,int>::reverse_iterator it; 

    for (int i=0;i<n;i++){ 
     scanf("%d %d\n",&k[i],&l[i]); 
     dif[i] = l[i]-k[i]; 
     m.insert(make_pair(dif[i],l[i])); 
    } 

    int a = 0; 
    int sum = 0; 

    for(it = m.rbegin(); it != m.rend(); ++it) { 
     cout << "hi" << endl; 
     int article = it->second - it->first; 
     int people = it->second; 

     if (a < f and article!=0){ 
      a++; 

      if (2*article > people){ 
       sum = sum + people; 
      } else { 
       sum = sum + (2*article); 
      } 
     } else { 

      if (article > people){ 
       sum = sum + people; 
      } else { 
       sum = sum + article; 
      } 
     } 
    } 

    cout << sum; 
    return 0; 
} 
+0

Sie möchten wahrscheinlich eine 'multimap' anstatt einer' map'. – Bernard

Antwort

1

Das hat nichts mit Reverse-Iteration zu tun, wäre es mit der Vorwärtsiteration gleich sein. Eine Karte hat ein Schlüsselpaar und einen Wert. Jeder Schlüssel kann nur einmal in der Karte enthalten sein. Wenn Sie denselben Schlüssel erneut eingeben, wird der vorherige Wert überschrieben. In Ihrem zweiten Testfall setzen Sie die wichtigsten 0 dreimal:

4 1 
0 2 <-- 
0 3 <-- 
3 5 
0 6 <-- 

So Ihre Karte nur tatsächlich hat drei Werte, so sind die drei „Hallo“ richtig. In Ihrem ersten Beispiel überschreiben Sie den Schlüssel 2 nur zweimal, also die vier "Hi". Vielleicht ist eine Karte nicht der richtige Container, nach dem Sie suchen.

+0

Vielen Dank. Das habe ich nicht gesehen. –

Verwandte Themen