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?
 ฉันกำลังพยายามให้การหักอาร์กิวเมนต์เทมเพลตอัตโนมัติทำงานใน C ++ ฉันได้เขียนฟังก์ชันที่ยอมรับ std::map โดยมีประเภทใดก็ได้สองประเภทเป็นอินพุต และส่งกลับตัวแปรโดยประเภทแรกเป็นเอาต์พุต ตัวอย่างต่อไปนี้ใช้งานได้และคอมไพล์ได้สำเร็จ: ``` std::map<std::string, int> map1; map1["แอปเปิ้ล"] = 1; สตริง key1 = getkey (map1, 1); ``` สิ่งต่อไปนี้ไม่: ``` std::map<int, std::string> map2; map2[1] = "แอปเปิ้ล"; int key2 = getkey(map2, "apple"); ``` คอมไพเลอร์บอกว่าไม่สามารถสรุปประเภทที่ใช้ในแผนที่ได้ สาเหตุของสิ่งนี้คืออะไร?
spam lang_mismatch pii not_appropriate hate_speech sexual_content quality toxicity humor creativity violence