c++ - 如何检查类 obj 是否为空

标签 c++

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

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

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

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

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

最佳答案

在 C++ 中,哈希表和映射没有 bool 值“检查是否存在”。如果你这样做

m[x]

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

但通常这不是您想要的,首先检查 C++ 方式是否是

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

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

关于c++ - 如何检查类 obj 是否为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27074855/

相关文章:

c++ - 模板函数的动态调度?

c++ - cin 在我的代码中不起作用

C++11 移动语义和右值引用

c++ - 动态创建新对象的最佳方法

c++ - 如何知道设备何时从网络中删除使用 Bonjour C 库

c++ - ffmpeg avcodec_open2 更改了 AVCodecContext 中的音频格式

c++ - 在 tr1 中为模板类定义散列

c++ - 检查字符设备

c++ - Sublime Text 3 以 C++ 方式打开 C 文件

c++ - 从非常量对象调用 const 函数