2017-03-29 13 views
0

私はstd :: pairを使って、std :: mapを使ってstd :: stringにマップしようとしています。 charとstringからなるペアが与えられて動作する方法は、それを特定の文字列にマップします。std :: mapを使用して文字列と文字ペアを文字列にマップする方法は?

このセットアップは、これまで(コンパイラがそれを受け入れる)だけで正常に動作:

std::map<std::pair<char, std::string>, std::string> mymap; 
std::map<std::pair<char, std::string>, std::string>::iterator it; 

をしかし、私はこれを実行しようとすると:

mymap['a', "Q1"] = "Q4"; 
mymap['b', "Q2"] = "Q3"; 
mymap['c', "Q3"] = "Q2"; 
mymap['d', "Q4"] = "Q1"; 

それは私が理解していないこのエラーとして返ってきます:

Error 1 error C2679: binary '[' : no operator found which takes a right-hand operand of type 'const char [3]' (or there is no acceptable conversion) 

これは、4行のコードのそれぞれの左括弧の下に関連付けられたエラーです(赤いsqうずまきが表示されます)

誰かが私が間違っていることを理解するのに役立つことができますか?

+2

mymap [{'a、 "Q1"}] = "Q4"が好きですか? – user1438832

答えて

2

マップ上の[]演算子には2つの項目がありません。それはただ一つしかかかりません。あなたの場合は、std :: pairオブジェクトが必要です。したがって、このようなものに動作します:

mymap[std::pair<char, std::string>('c', "Q1")] = "Q4"; 

あなたのペアクラスのtypedefを作りたいかもしれません:あなたは2を提供するのに対し、

using myPair = std::pair<char, std::string>; 
mymap[myPair('c', "Q1")] = "Q4"; 
1

std::mapため[]オペレータは、一つだけの引数を受け入れます。タイプstd::pairのオブジェクトを使用する場合は、charstd::stringstd::pairオブジェクトを作成する必要があります。あなたはまた、オブジェクト定義にあなたがしようとするたびにヨーヨーアクセス要素を提供することができ

mymap[{'a', "Q1"}] = "Q4"; 
mymap[{'b', "Q2"}] = "Q3"; 
mymap[{'c', "Q3"}] = "Q2"; 
mymap[{'d', "Q4"}] = "Q1"; 

:あなたは{}でそれらを囲むことによってそれを行うことができます

mymap[std::pair<char, std::string>('a', "Q1")] = "Q4"; 
mymap[std::pair<char, std::string>('b', "Q2")] = "Q3"; 
mymap[std::pair<char, std::string>('c', "Q3")] = "Q2"; 
mymap[std::pair<char, std::string>('d', "Q4")] = "Q1"; 

しかし、私の意見では最初のオプションが良いですし、 errorproneを少なくします。

関連する問題