2016-07-11 9 views
-2

私はいけない、印刷にマップ以下、このコードでペアを含める方法を知っているがA:1 B:2 C:3ペアCPPまたは埋めるためにマップを使用して印刷

#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

をより良く、便利な答えを引き付けるだろう特定に降りてください。 – Jeet

+0

私はそれが私の最初の投稿であることを知っていることをより良くすることができる方法を知っていないと思います。 – Tahtoh

+1

マップを使用していません。ペアを使用しています。 – ChrisD

答えて

0

あなたは多くのことを間違っています。

char letter = 'A'; 

これまで良好でした。

typedef pair<char, int> LettreValues; 

今、あなたは南に行きました。 "LettreValues"と呼ばれるstd :: pairの型エイリアス( 'typedef')を定義しました。

しかし、LettreValuesは型です。その型のインスタンスではありません。 1i開始以来

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

、あなたのマップに挿入する最初の値は、これがそうでない変数としてLettreValuesを使用しようとする「」+ 1

になります。マップとして使用しようとしますが、それはペアではありません。

static_cast<char>(letter + 1); 

これは、文字に1を加え、それをcharに変換して破棄します。

私はおそらくあなたがこのような何かを意図されたと思う:

// 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"; 
} 

ライブデモ:http://ideone.com/7ZA5Bk

+0

ありがとうございました – Tahtoh

+0

私のコードをここで確認できますか、私は正しいことを試み、タスクを単純化するための複数の関数を作成しましたが、常に間違った結果を返します。ここでは、問題へのリンクhttp://train.usaco.org/usacoprob2?a=zeWky61KJoG&S=rideそしてここに私の解決策ですhttp://ideone.com/a9YHl6 – Tahtoh

+0

あなたのマップの使用は過剰工学です、あなた'input [i] - 'A' + 1'を使うことができるだけでなく、ループ内で' returnMap() 'を呼び出すことは、それぞれの文字ごとにマップを作り直すことを意味します。 'sizeof(string)'は、文字列の長さではなく文字列オブジェクトのサイズを返します。これは非常にpythonesequeです。文字列の長さを得るには 'input.length()'を使います。最後に、あなたが計算している値は10の倍数です。10の法10の倍数は0です。コードのコメントは、 'mod 47'ではなく 'mod 10'であることを示しています。 http://ideone.com/yBWr8l – kfsone

-1

形式でリストをOU STDを使用してペアに挿入してみてください。 :make_pairを以下のように設定します。

char letter = 'A'; 
    typedef pair<char, int> lettervalues; 
    for(int i = 1;i<27;i++) 
    { 
     lettervalues l = std::make_pair<char, int>(letter,i); 
     letter = static_cast<char>(letter + i); 
    } 
+0

あなたが投稿したコードを読むかもしれません。 – kfsone

関連する問題