私はあなたの質問を手伝ってくれてうれしいです！コンパイラが2番目の例でマップで使用されているタイプを推測するのに苦労している理由は、マップ内のタイプの順序が最初の例から変更されたことです。最初の例では、キータイプはSTD ::文字列であり、値タイプはintです。ただし、2番目の例では、キータイプはintであり、値タイプはstd :: stringです。注文のこの違いは、コンパイラが関数呼び出しで使用する正しいタイプを決定するのに苦労することです。

この問題を解決するために、このような関数を呼び出すときにタイプを明示的に指定できます。

int key2 = getKey <int、std :: string>（map2、 "apple"）;

テンプレートの引数を明示的に提供することにより、マップのキーと値タイプに使用するタイプをコンパイラに伝え、関数呼び出しの正しいタイプを正常に推定できるようにします。
I would be happy to help with your question! The reason why the compiler is having trouble deducing the types used by the map in your second example is that the order of the types in the map has changed from the first example. In the first example, the key type is a std::string and the value type is an int. However, in the second example, the key type is an int and the value type is a std::string. This difference in ordering is causing the compiler to have trouble determining the correct types to use in the function call.

To resolve this issue, you could explicitly specify the types when calling the function, like this:

int key2 = getkey<int, std::string>(map2, "apple");

By providing the template arguments explicitly, you are telling the compiler which types to use for the map's key and value types, and allowing it to successfully deduce the correct types for the function call.