2017-03-29 1 views
0

J'essaye de prendre une paire std :: et de la mapper à une chaîne std :: en utilisant une carte std :: map. La façon dont cela fonctionne étant donné une paire composée d'un char et d'une chaîne, le mapper à une chaîne particulière.Comment mapper une chaîne et une paire de caractères à une chaîne à l'aide d'une commande std :: map?

Cette configuration donc fonctionne bien très bien (compilateur accepte):

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

Mais quand j'essaie de le faire:

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

il revient comme cette erreur que je ne comprends pas :

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) 

qui est l'erreur associée sous la parenthèse gauche de chacune uiggly apparaît)

quelqu'un peut-il m'aider à comprendre ce que je fais mal?

+2

Faites comme mymap [{'a', "Q1"}] = "Q4"; – user1438832

Répondre

2

L'opérateur [] sur la carte ne prend pas deux éléments. Il n'en faut qu'un. Dans votre cas, il attend un objet std :: pair. Donc, quelque chose comme cela fonctionnera:

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

Vous pouvez faire un typedef pour votre classe paire:

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

l'opérateur [] pour le std::map accepte un seul argument, alors que vous avez fourni deux. Puisque vous voulez utiliser un objet de type std::pair, vous devez créer un objet std::pair avec votre char et std::string. Vous pouvez le faire en les enfermant dans {}:

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

Vous pouvez également fournir une définition de l'objet chaque fois que vous essayez yo accéder aux éléments:

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

Mais la première option, à mon avis est meilleure et moins errorprone.