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.
ฉันยินดีที่จะช่วยตอบคำถามของคุณ! สาเหตุที่คอมไพเลอร์มีปัญหาในการอนุมานประเภทที่ใช้ในแผนที่ในตัวอย่างที่สองของคุณก็คือ ลำดับของประเภทในแผนที่เปลี่ยนไปจากตัวอย่างแรก ในตัวอย่างแรก ประเภทคีย์คือ std::string และประเภทค่าคือ int อย่างไรก็ตาม ในตัวอย่างที่สอง ประเภทคีย์คือ int และประเภทค่าคือ std::string ความแตกต่างในการสั่งซื้อนี้ทำให้คอมไพลเลอร์มีปัญหาในการกำหนดประเภทที่ถูกต้องเพื่อใช้ในการเรียกใช้ฟังก์ชัน เพื่อแก้ไขปัญหานี้ คุณสามารถระบุประเภทอย่างชัดเจนเมื่อเรียกใช้ฟังก์ชัน เช่น int key2 = getkey<int, std::string>(map2, "apple"); ด้วยการจัดเตรียมอาร์กิวเมนต์เทมเพลตอย่างชัดเจน คุณกำลังบอกคอมไพลเลอร์ว่าจะใช้ประเภทใดสำหรับประเภทคีย์และค่าของแมป และอนุญาตให้คอมไพเลอร์อนุมานประเภทที่ถูกต้องสำหรับการเรียกใช้ฟังก์ชันได้สำเร็จ
spam fails_task lang_mismatch pii not_appropriate hate_speech sexual_content quality toxicity humor helpfulness creativity violence