2016-07-11 14 views
-2

Ich weiß nicht, wie unten Druck in diesem Code eine Karte oder ein Paar enthalten ou eine Liste im Format A:1 B:2 C:3Pair cpp oder eine Karte verwenden, um zu füllen und drucken

#include <iostream> 
using namespace std; 
#include <map> 
#include <string> 

int main() { 
    // your code goes here 
    char letter = 'A'; 
    typedef pair<char, int> LettreValues; 
    for (int i = 1; i < 27; ++i) 
    {  
     LettreValues[letter]=i; 
     static_cast<char>(letter + 1); 
    } 
    for(auto elem : LettreValues) 
    { 
     std::cout << elem.first << " " << elem.second.first << " " << elem.second.second << "\n"; 
    } 

    return 0; 
} 
+0

Bitte an den spezifischen get down, die besser und nützliche Antworten anziehen würden. – Jeet

+0

Ich habe versucht, so klar zu sein wie ich, weiß nicht, wie ich es besser bekommen kann, wissend, dass dies mein erster Beitrag ist. – Tahtoh

+1

Sie verwenden keine Karte, Sie verwenden ein Paar. – ChrisD

Antwort

0

Sie machen eine Reihe von Dingen falsch.

char letter = 'A'; 

so weit so gut.

typedef pair<char, int> LettreValues; 

Jetzt sind Sie nach Süden gegangen. Sie haben einen Typ-Alias ​​('typedef') für std :: pair definiert, der "LettreValues" heißt.

Aber LettreValues ​​ist ein Typ - keine Instanz dieses Typs.

for (int i = 1; i < 27; ++i) 

Seit i beginnt bei 1, der erste Wert, den Sie in Ihre Karte einfügen wird 'A' + 1.

Diese versucht LettreValues als eine Variable zu verwenden, was es nicht ist; es versucht, es als eine Karte zu verwenden, die es nicht ist - es ist ein Paar.

Dies fügt eins zum Buchstaben hinzu, wandelt es in ein Zeichen um und verwirft es.

Ich denke, vielleicht Sie beabsichtigen, so etwas wie diese:

// Declare an alias for std::map<char, int>. 
using LettreValues = std::map<char, int>; 
// Now declare a variable of this type 
LettreValues letterValues; 

// the type alias step is completely optional, we 
// could have just written 
// std::map<char, int> letterValues; 

for (int i = 0; i < 26; ++i) { 
    letterValues[letter] = i; 
    letter++; 
} 

for (auto& el : letterValues) { 
    std::cout << el.first << " " << el.second << "\n"; 
} 

Live-Demo: http://ideone.com/7ZA5Bk

+0

genau danke mate – Tahtoh

+0

Können Sie meinen Code hier überprüfen, ich habe versucht, Recht zu bekommen, erstellen mehrere Funktionen zu simplfy die Aufgabe, aber ich immer das falsche Ergebnis zurück. Hier ist der Link zu dem Problem http://train.usaco.org/usacoprob2?a=zeWky61KJoG&S=ride Und hier ist meine Lösung http://ideone.com/a9YHl6 – Tahtoh

+0

Ihre Verwendung einer Karte ist over-engineering, Sie kann einfach 'input [i] - 'A' + 1' verwenden und auch' returnMap() 'in der Schleife aufrufen bedeutet, die Map für jeden einzelnen Buchstaben neu zu erstellen. 'sizeof (string)' liefert die Größe eines string-Objekts, nicht die Länge der string (das ist sehr pythoneseque von Ihnen). Um die Länge eines Strings zu erhalten, verwenden Sie 'input.length()'. Schließlich sind die Werte, die Sie berechnen, ein Vielfaches von 10. Jedes Vielfache von 10 Modulo 10 ist 0. Die Kommentare in Ihrem Code zeigen an, dass es "Mod 47" und nicht "Mod 10" sein sollte. http://ideone.com/yBWr8l – kfsone

-1

Versuchen Sie, in Paar Einfügen std: : make_pair wie unten.

+0

Vielleicht lesen Sie den Code, den Sie gepostet haben. – kfsone