যার উপর নির্ভর করে জমিদার আমরা যে বিষয়ে কথা বলছি, std::unordered_map::operator[]
সমতূল্য [unord.map.elem]
T& operator[](const key_type& k)
{
return try_emplace(k).first->second;
}
(কোনও মূল্য-রেফারেন্স গ্রহণ করা ওভারলোড কেবল সরে k
যায় try_emplace
এবং অন্যথায় অভিন্ন)
k
মানচিত্রে কী এর অধীনে কোনও উপাদান উপস্থিত থাকলে try_emplace
সেই উপাদানটিতে একটি পুনরাবৃত্তি প্রদান করে এবং false
। অন্যথায়, try_emplace
কী এর অধীনে একটি নতুন উপাদান সন্নিবেশ করান k
, এবং এটি এবং true
[unord.map.modifiers] এ একটি পুনরুক্তি ফেরত দেয় :
template <class... Args>
pair<iterator, bool> try_emplace(const key_type& k, Args&&... args);
আমাদের জন্য আকর্ষণীয় হ'ল এখনও কোনও উপাদান নেই [unord.map.modifiers] / 6 :
অন্যথায় প্রকারের value_type
সাথে নির্মিত একটি বস্তু সন্নিবেশ করানpiecewise_construct, forward_as_tuple(k), forward_as_tuple(std::forward<Args>(args)...)
(কোনও মূল্য-রেফারেন্স গ্রহণ করা ওভারলোড কেবল সরে k
যায় forward_as_tuple
এবং আবার অন্যথায় অভিন্ন হয়)
যেহেতু value_type
একটি pair<const Key, T>
[unord.map.overview] / 2 , সুতরাং এটি আমাদের জানায় যে নতুন মানচিত্রের উপাদানটি এই হিসাবে নির্মিত হবে:
pair<const Key, T>(piecewise_construct, forward_as_tuple(k), forward_as_tuple(std::forward<Args>(args)...));
যেহেতু args
আসার সময় খালি তাই operator[]
, এটি pair
কোনও নতুন যুক্তি [جوڑ.pair] / 14 এর সদস্য হিসাবে নির্মিত আমাদের নতুন মূল্যে ফোটে যা সরাসরি প্রারম্ভিককরণ [class.base.init] / 7T
ব্যবহার করে টাইপের মান ব্যবহার করে ()
ইনিশিয়ালাইজার হিসাবে যা মূল্য সূচনাতে নীচে ফোটে [dcl.init] / 17.4 । একটির মান সূচনা int
হ'ল শূন্য সূচনা [dcl.init] / 8 । এবং একটি int
প্রাকৃতিকভাবে শূন্য সূচনা যা int
0 [dcl.init] / 6 এ শুরু করে ।
হ্যাঁ, আপনার কোডটি 0… ফেরত দেওয়ার গ্যারান্টিযুক্ত