我试图在其中散列大量具有二进制数据的文件,以便:(1)检查将来的损坏,以及(2)消除重复文件(可能具有完全不同的名称和其他元数据).
我知道md5和sha1及其亲属,但我的理解是这些是为安全而设计的,因此故意减慢以降低暴力攻击的效力.相比之下,我希望算法尽可能快地运行,同时尽可能减少冲突.
有什么建议?
Node是一个非常简单的类,只有一个构造函数和一些变量:一个"名称"(实际上只是一个char)和两个名为"left"和"right"的子节点指针.
我刚刚开始编写一些需要放到最左边节点的代码,当我提出这个问题时我很高兴:
Node *current = this->root;
while (true) (current->left != nullptr) ? current = current->left : break;
Run Code Online (Sandbox Code Playgroud)
看起来很简单:在无限循环中,检查当前是否有一个左子,如果是,将当前设置为该左子,如果没有,则跳出循环.这是一个很酷的小单行,不太难以理解.(我评论了它!)
好吧,我的编译器不喜欢它:
iterator.cpp:20:70: error: expected expression
while (true) (current->left != nullptr) ? current = current->left : break;
^
1 error generated.
Run Code Online (Sandbox Code Playgroud)
而且,只是在while循环中抛出一些括号并将三元运算符移动到它自己的行上并没有帮助(不出所料).我不得不把它变成if/else让编译器接受它.
有人可以解释它是如何解释单线及其对象的原因吗?