我正在用模板代码片段在C ++中编码trie结构:
pair<char,T>
我有一个方法void empty(),我要在其中检查是否未设置根的第二个值(值等于默认构造函数值或详细说明:值将存储其他对类型。)。我知道默认构造函数将对数据类型int应用0,但是如何在模板中检查呢?
另一篇文章提到了这一点:return root == new Trie <char,T>()(对未知==运算符失败的二重奏)
提前致谢
一个std::pair
小号成员不能为“未设置”。
你可以用来std::optional
为可选值建模。
“ ...值等于默认构造函数...”
当然,你可以检查当前值是否等于初始值:
std::pair<int,int> x;
if (x.first == 0) {
std::cout << "value of x.first is that of a default constructed std::pair<int,int>";
}
或的第二个成员std::pair<int,T>
:
if (x.second == T{} ) {
std::cout << "second has same value as a default constructed T";
}
完整的例子:
#include <iostream>
#include <utility>
template <typename T>
bool check_if_default_second(const std::pair<int,T>& p) {
return p.second == T{};
}
int main() {
std::pair<int,int> p;
std::cout << check_if_default_second(p);
}
我改变了最初的问题。我无法更改代码。基本上,pair.second包含其他对,这会创建一棵树。因此,我想检查第二个值是否除了从构造函数中创建的值之外没有对(或其他值)。换句话说。我想检查second.vales是否曾经被代码触及过。
我必须检查第二个值,而不是第一个,即T。
@SebyKiunke刚刚添加了一个部分,专门处理您的上一次编辑。无论是变化
first
还是second
变化不大@SebyKiunke fwiw,我知道这并不能解决您实际要问的问题。那在很大程度上得到了扩展,因为问题还不是很清楚。听起来像是XY问题。也许在您问实际问题的地方打开另一个问题。是什么使您认为需要检查是否设置了pairs成员?您在这里提到了一些内容,但目前尚不清楚
@SebyKiunke你不明白吗?它将对中的第二个成员与默认构造的进行比较
T
。如果我正确理解了问题,那就是您想要的