【发布时间】:2021-09-29 01:21:53
【问题描述】:
我的最佳猜测是委员会要么忘记了这个用例,要么不想使用概念/要求将 span 类型限制为可以安全散列的东西(POD,无填充),或者他们不想要一半的解决方案(等待反思)...
如果有人对此感兴趣,godbolt 链接带有无用的错误消息和代码,但我认为我的问题很清楚,没有任何代码。
#include <span>
#include <unordered_set>
#include <string_view>
int main() {
std::hash<std::string_view> h1;
std::hash<std::span<char>> h2; // error here
}
注意:我知道 C++ std:: 库在涉及散列的情况下缺乏,例如它不能散列std::pair<int,int>,但我的问题特别是关于std::span。
【问题讨论】:
-
std::string_view是一个字符串的视图,并且同意为字符串提供散列函数。std::span<char>就像std::vector<char>。它可能有一个字符串,或者它可能是某些东西的二进制有效负载。在这里使用的散列不太直接。 -
@NathanOliver AFAIK 有一个包含任何内容的 string_view 并没有违法,或者你指的是别的东西(比如什么哈希对常见的文本模式有很好的属性)? godbolt.org/z/5drn7se4q
-
当然,没有实际的规则,但为什么要使用
string_view而不是查看字符串?使用它的类型来传达意图非常适合自我记录。回答是的,我的区别是那里有适合文本的散列,并且由于string_view应该 中有文本,因此有一个散列是有意义的。span<char>OTOH 可以表示任何东西,并且可能需要也可能不需要不同类型的散列。对我来说,这足以模棱两可,不能提供哈希器,就像我们没有用于vector<char>或array<char, N>的哈希器一样
标签: c++ c++20 string-view std-span