<|begin_of_text|><|start_header_id|>system<|end_header_id|>

You are a helpful chatbot that always answers in Uzbek.<|eot_id|><|start_header_id|>user<|end_header_id|>

Men C++da avtomatik shablon argumentini chiqarib olishni istayman. Men std::mapni har qanday ikki o'zboshimchalik turi bilan qabul qiladigan va birinchi turi bilan o'zgaruvchini qaytaradigan funksiya yozdim. Quyidagi misol ishlaydi va muvaffaqiyatli kompilyatsiya qiladi: `` std::map<std::string, int> map1; map1["apple"] = 1; string key1 = getkey(map1, 1); ``` Quyidagilar emas: `` std::map<int, stdstring>::2; map2[1] = "apple"; key2 int = getkey(map2, "apple"); ``` Kompilator xarita tomonidan ishlatiladigan turlarni chiqarib bo'lmaydi, deb aytadi. Buning sababi nimada?<|eot_id|><|start_header_id|>assistant<|end_header_id|>

Buning sababi shundaki, funksiyalar uchun shablon argumenti deduksiyasi, agar argumentilar ikkita funksiya chaqiruvlari uchun parametrlar ro'yxatida turli joylarda bo'lsa, ishlamaydi. Birinchi misolda kalit turi std::string va qiymat turi int, shuning uchun shablon argumenti deduksiyasi T ni std::string va U ni int deb to'g'ri aniqlashi mumkin. Ikkinchi misolda kalit turi int va qiymat turi std::string, shuning uchun deduksiya muvaffaqiyatsiz bo'ladi, chunki turlar turli tartibda. Buni tuzatish uchun siz funksiya chaqiruvlari uchun shablon argumentlarini aniq belgilashingiz mumkin: ``c++ int2 = getkey<int, std::string>(map2, "apple"); `c``) Yoki, shablon ta'rifi parametrlarining tartibini shabl<|eot_id|><|start_header_id|>user<|end_header_id|>

Shunday qilib, aniqlik uchun, muammoning asosi kompilyator "Apple" ning std::string ekanligini biron bir ishora berilmasdan bilmaydi deb taxmin qilishim to'g'rimi? Birinchi misoldagi burchak qavslaridagi kabi yoki ikkinchi kirish parametrining ikkinchi misoldagi xarita qiymati bilan bir xil turdagi nomi bo'lishi kerakmi?<|eot_id|><|start_header_id|>assistant<|end_header_id|>

Ha, to'g'ri. Namunaviy argumentlarni chiqarib tashlash kompilyatorning haqiqiy argumentlar turlariga asoslangan holda funksiya argumentlarining turlarini chiqarib tashlash qobiliyatiga bog'liq. Siz taqdim etgan ikkinchi misolda kompilyator to'g'ri turlarni chiqarib bo'lmadi, chunki funksiya ta'rifidagi namunaviy parametr turlari haqiqiy argumentlarga qaraganda boshqacha tartibda. Namunaviy argumentlarni aniq ko'rsatib yoki namunaviy parametrlarni qayta joylashtirish orqali siz kompilyatorga qaysi turlarni ishlatish kerakligi haqida maslahat berasiz, shunda namunaviy argumentlarni chiqarib tashlash muvaffaqiyatli bo'ladi.<|eot_id|>