我正在使用unordered_maps的unordered_map,这样我就可以使用"多键"语法引用一个元素:
my_map[k1][k2]
.
有没有一种方便的方法来使用相同的"多键"语法来检查元素是否存在,然后再尝试访问它?如果没有,最简单的方法是什么?
如果您打算测试密钥的存在,我就不会使用
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 //------------------------------------------------------------------------------ templatebool nested_key_exists(std::unordered_map > 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; }