私は順序が異なることを知っている、私は例を書きました。あなたは私の質問に答えませんでした。自動テンプレート引数控除が最初の例ではなく、最初の例で機能するのはなぜですか？
C ++では、STD :: MAPは、キータイプと値タイプの2つのテンプレートパラメーターを取得するテンプレートクラスです。Map2と「Apple」を引数としてgetKey関数を呼び出すと、マップ2の重要なタイプがintであり、「Apple」はstd :: stringのタイプであるため、コンパイラはマップで使用されるタイプを推測することはできません。マップの重要なタイプとは一致しません。

この問題を修正するために、MAP2および「Apple」でそれを呼び出すときに、GetKey関数のテンプレート引数を明示的に指定できます。例えば：

        std :: map <int、std :: string> map2;
        Map2 [1] = "Apple";
        int key2 = getKey <int、std :: string>（map2、 "apple"）;

この場合、テンプレート引数<int、std :: string>は、getKey関数に対して明示的に指定されているため、コンパイラはマップとキー引数の正しいタイプを推定できます。

または、GetKey関数を変更して、最初の値がマップであり、2番目の値がキーである値のペアを受け入れることができます。このアプローチは、マップとキーのタイプが関数引数として明示的に指定されるため、テンプレート引数控除の必要性を完全に排除します。