std::make_pair
がパラメータとして転送参照がかかるためです。テンプレートパラメータを明示的に指定する場合は、std::make_pair
と推定コンテキストを使用し、std::pair
のコンストラクタを使用する必要があります。ここで
のは、あなたの選択肢は次のとおりです。
make_pair:
void insertIf(std::string str1, int value, std::map<std::string,int>& myMap) {
if(value == 1 {
myMap.insert(std::make_pair(str1, value));
}
}
ペアコンストラクタさらに良い
void insertIf(std::string str1, int value, std::map<std::string,int>& myMap) {
if(value == 1 {
myMap.insert(std::pair<std::string, int>(str1, value));
}
}
、emplace
:
あなたは本当に、明示的なパラメータで
std::make_pair
を使用したい場合は
void insertIf(std::string str1, int value, std::map<std::string,int>& myMap) {
if(value == 1 {
myMap.emplace(str1, value);
}
}
、テンプレートパラメータの値のカテゴリを指定することができますが、私はあなたがこのをしないように助言、それはちょっとstd::make_pair
の全体の目的を敗北します:
void insertIf(std::string str1, int value, std::map<std::string,int>& myMap) {
if(value == 1 {
myMap.insert(std::make_pair<std::string&, int&>(str1, value));
}
}
編集:あなたはまだ転送の参照をサポートしていないVSの古いバージョンを使用する必要がありますので、それはWindows上で働いていました。
[mcve]がありますか? – user4581301
Typo? 'arg1.insert(std :: make_pair(str1、int1));' < - '))' –
Unimportant