NoS*_*tAl 6 c++ string-view c++20 std-span
我最好的猜测是,委员会要么忘记了这个用例,要么不想使用概念/要求将类型限制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
}
Run Code Online (Sandbox Code Playgroud)
注意:我知道 C++std::库在哈希方面缺乏,例如它不能哈希std::pair<int,int>,但我的问题特别是关于std::span.
string_view绝对是一个字符串;aspan<char>只是chars 的数组。它可能具有与 a 相同的概念含义string_view,但您不能说这对于该类型本质上是正确的。因此,标准假设每个都span<char>应该被等同于字符串对待是不合理的。
大多数容器没有标准定义的哈希(字符串容器是唯一的例外)。原因是对于 s 序列没有一个好的默认哈希算法T。即使有,span<char>使用该算法几乎肯定不会产生与string_view.
此外,这两种类型以不同的方式对待等效性。string_view有operator==超载;span<T>才不是。散列在概念上基于相等性:如果两个对象比较相等,则这些对象产生的散列必须相等。但由于span根本没有相等性测试,因此散列 aspan没有什么意义。
| 归档时间: |
|
| 查看次数: |
738 次 |
| 最近记录: |