如何检查类obj是否为null

时间:2014-11-22 06:48:51

标签: c++

我有一个带有顶点列表的哈希表(unsorted_map)。我想知道散列表中是否存在顶点,但表本身是私有的,唯一的getter方法是pointsTo()函数,它返回该顶点指向的顶点。

我想检查是否没有指向特定顶点的边。

if(vertices[to]->pointsTo(from) != nullptr)
{
}

产生错误"No operator != matches these operands. Operand types are Edge!=std::nullptr_t"

取消引用*(vertices [to] - > pointsTo(from))表示"没有运算符*匹配这些操作数"

1 个答案:

答案 0 :(得分:2)

在C ++哈希表和地图中,没有布尔值"检查是否存在"。如果你这样做

m[x]

如果x不存在,则会创建与该密钥关联的新的默认初始化元素。

然而,这通常不是你想要的,首先检查C ++方式是

if (m.find(x) != m.end()) {
    ... element x is present ...
}

标准地图的另一个烦恼是,假设[]是一个可以改变对象的操作,你不能将它与const引用一起使用,或者当地图值没有默认构造函数时。因此,即使在出于其他原因确定密钥始终存在的情况下,m[x]仍然是禁止操作,您需要使用m.at(x)