2016-09-10 3 views
-1

トピックで書いたように - マップの最初の引数にsf :: Stringを入れようとしましたが動作しません。sf :: std :: map keyに入れた文字列が機能しません - vauleはマップに保存されません

void Flashcards::add(sf::String sf_string) { 
std::string text = sf_string.toAnsiString(); 
std::pair<std::string,std::string> pairr = std::make_pair(text,"<Polish translation>"); 
std::cout << "Inserting: " << pairr.first << std::endl; 
all_words.insert(pairr); //std::map<std::string, std::string> variable 



void Flashcards::show() { 
std::cout << "Flashcards:\n"; 
for (std::map<std::string, std::string>::iterator it = all_words.begin(); it != all_words.end(); it++) 
{ 
    std::cout << "English word: " << it->first 
    << " " << "Polish word: " << it->second << std::endl; 
} 

コンソールでの結果は次のとおりです:代わりに必要なの

Inserting: //a word// 
Flashcards: 
Polish word: <Polish translation> 

Inserting: hello 
Flashcards: 
English word: //a word// Polish word: <Polish translation> 
ここ

私はすでに試してみましたバリエーションです:ここでは、コードです

1)私は議論を次のように変更しました:std::make_pair("<Polish translation>",text);とそれは動作します - ハードコーディングされたキーと値aどちらもコンソールに表示されます(ただし、ハードコーディングは必要ありませんが、明白です)。

2)この行:std::cout << "Inserting: " << pairr.first << std::endl;は、キー値がstd :: stringに正しく変換されていることを示しています。これを呼び出すと、キーボードで入力したばかりの値が表示されます。

3)sf :: string値をstd :: make_pair()メソッドに直接送信しようとしましたが、これはstd :: stringを置くのとまったく同じです。

誰かがこの作品を作る方法を言うことができますか?

+1

このコードはコンパイルされません。 –

答えて

0

addメソッドの引数として指定している文字列は、おそらくUnix/Linux実行環境を使用してWindowsのテキストファイルから読み取っているため、\r(改行文字)文字で終了します。あなたのプログラムの出力をファイルに取り込み、16進数(例えばhd)で見ると、何が起きているのかがすぐに分かるはずです。

C++標準ライブラリの使用とはまったく関係ありません。ただし、std::mapにエントリを挿入するすべての作業に行く必要はありません。ただ、この操作を行います。

all_words[key] = value; 

を限り、おそらくより効率的にだけでなくkeyが正しい型を持っている(または自動変換がある)の単一のラインに容易に理解ラインに正確にあなたがやりたいだろう、とのように。

+0

あなたは正しいですが、データを取得している間、私は間違いで文字列に「入力」していました。ループのいくつかの変更の後、すべてが完全に動作します。コードを短縮するヒントをいただきありがとうございます。シンプルできれいに見えます。 –