आपका इरादा कुंजी के अस्तित्व के लिए परीक्षण करने के लिए है, तो मैं
my_map[k1][k2]
का उपयोग नहीं करेंगे क्योंकि operator[]
डिफ़ॉल्ट अगर यह पहले से मौजूद नहीं है कि कुंजी के लिए एक नया मूल्य का निर्माण करेगी।
बल्कि मैं std::unordered_map::find
का उपयोग करना पसंद करूंगा। तो अगर आप कुछ पहले कुंजी मौजूद हैं, लेकिन दूसरा नहीं आप
if (my_map[k1].find(k2) != my_map[k1].end())
{
// k2 exists in unordered_map for key k1
}
कर सकता है आप एक समारोह है कि दोनों कुंजी के अस्तित्व के लिए जाँच करता है बनाने के लिए चाहते हैं, तो आप
की तरह कुछ लिख सकता है
//------------------------------------------------------------------------------
/// \brief Determines a nested map contains two keys (the outer containing the inner)
/// \param[in] data Outer-most map
/// \param[in] a Key used to find the inner map
/// \param[in] b Key used to find the value within the inner map
/// \return True if both keys exist, false otherwise
//------------------------------------------------------------------------------
template <class key_t, class value_t>
bool nested_key_exists(std::unordered_map<key_t, std::unordered_map<key_t, value_t>> const& data, key_t const a, key_t const b)
{
auto itInner = data.find(a);
if (itInner != data.end())
{
return itInner->second.find(b) != itInner->second.end();
}
return false;
}
और अगर आप नहीं कर रहे हैं निश्चित है कि 'k1' मौजूद है, आप 'find' का उपयोग दो बार करना चाहते हैं - एक बार' k1' की जांच करने के लिए और एक बार 'k2' की जांच करने के लिए। – zmb
@zmb मुझे लगता है कि मुझे यही चाहिए। – user997112
@ user997112 उस स्थिति में आप उत्तर के निचले भाग में 'nested_key_exists' फ़ंक्शन का उपयोग कर सकते हैं। यदि दोनों कुंजी मौजूद हैं, तो यह 'सत्य' वापस आ जाएगी, अन्यथा। – CoryKramer