C ++で動作する自動テンプレート引数控除を取得しようとしています。2つの任意の型を入力としてSTD :: MAPを受け入れる関数を書き、最初のタイプの変数を出力として返します。次の例は、うまく機能し、コンパイルされています。
`` `
std :: map <std :: string、int> map1;
map1 ["apple"] = 1;
文字列key1 = getKey（Map1、1）;
`` `
以下は次のとおりです。
`` `
std :: map <int、std :: string> map2;
Map2 [1] = "Apple";
int key2 = getKey（map2、 "apple"）;
`` `
コンパイラは、マップで使用されるタイプを推測できないと言います。この原因は何ですか？
I am trying to get automatic template argument deduction to work in C++. I have written a function which accepts a std::map with any two arbitrary types as its input, and returns a variable with the first type as its output. The following example works and compiles successfully:
```
std::map<std::string, int> map1;
map1["apple"] = 1;
string key1 = getkey(map1, 1);
```
The following does not:
```
std::map<int, std::string> map2;
map2[1] = "apple";
int key2 = getkey(map2, "apple");
```
The compiler says it cannot deduce the types used by the map. What is the cause of this?