if (my_map[k1].find(k2) != my_map[k1].end())
{
// k2 exists in unordered_map for key k1
}
如果您想创建一个函数来检查both键是否存在,那么您可以编写如下代码
//------------------------------------------------------------------------------
/// \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;
}
7条答案
按热度按时间polkgigr1#
如果您的目的是测试密钥是否存在,我不会使用
因为
operator[]
将默认地为该键构造一个新值(如果它还不存在的话)。相反,我更愿意使用
std::unordered_map::find
。因此,如果您确定第一个键存在,但第二个键不存在,您可以这样做如果您想创建一个函数来检查both键是否存在,那么您可以编写如下代码
eni9jsuy2#
将适用于每个单值关联容器。
如果存在包含
k2
的元素k1
,则contains(my_map, k1, k2)
为真。6g8kf2rb3#
在C++20中,你可以使用
contains
方法(如果我没记错的话,添加到所有的关联容器中):kqlmhetl4#
您也可以使用
count
(http://www.cplusplus.com/reference/unordered_map/unordered_map/count/)如果键不存在,则返回0
dwthyt8l5#
像这样的东西吗?(对于可变的情况)
名字是这样的:
......或者还有更像Python的方法......
z9gpfhce6#
我不认为有多键语法需要检查,但最简单的方法是使用
find
方法,您可以编写一个简单的函数将其应用于unordered_map
s的unordered_map
reference
jljoyd4f7#
另一种方法是使用
std::pair
作为将两级哈希表转换为一级哈希表的键,其优点是:缺点:我们有一些密钥冗余,所以对于有很多重复的大密钥来说,这将是一个糟糕的选择,但是这种情况不会太常见,所以这里的策略仍然有用。
然后检查是否存在:
使用查找和比较结束迭代器
使用count函数(注意不要将其与unordered_multimap一起使用)
或C++20包含: