Yes, in C++ simply writing "apple" will give a string literal.

In your first example the compiler knows to convert this argument into an std::string, because that is the type that your map1 expects. Whereas in your second example your templated getkey function receives the two types, std::string from the type of map2 and the string literal from the parameter you gave, and is unable to know which way to convert them without some kind of a hint.
ใช่ ในภาษา C++ เพียงแค่เขียนว่า "apple" จะให้ค่าสตริงตามตัวอักษร ในตัวอย่างแรกของคุณ คอมไพลเลอร์รู้ว่าต้องแปลงอาร์กิวเมนต์นี้เป็น std::string เพราะนั่นคือประเภทที่ map1 ของคุณคาดหวัง ในขณะที่ในตัวอย่างที่สองของคุณ ฟังก์ชัน templated getkey ของคุณจะได้รับทั้งสองประเภท ได้แก่ std::string จากประเภทของ map2 และสตริงลิเทอรัลจากพารามิเตอร์ที่คุณให้ไว้ และไม่สามารถทราบวิธีแปลงได้หากไม่มีคำใบ้ใดๆ
spam fails_task lang_mismatch pii not_appropriate hate_speech sexual_content quality toxicity humor helpfulness creativity violence