【发布时间】:2021-10-31 16:34:29
【问题描述】:
我现在正在阅读 n4860,对此我有些好奇。
我不知道怎么解释,所以我只是举个例子。
现在我正在寻找“unordered_set”并且草稿说
template<class Key,
class Hash = hash<Key>,
class Pred = equal_to<Key>,
class Allocator = allocator<Key>>
class unordered_set;
我推断,当我制作自定义 Key 类时,我应该制作 hash、equal_to、allocator 类并将其填充到容器中正常工作。
但我找不到应该在课程中填写的内容。
例如,如果我创建自定义 Key 类,我必须使用 operator(const Key& key) 方法创建 Hash 类,并使用 operator(const Key& key1, const Key& key2) 方法创建 Pred 类。
还有一个例子,带有 operator(const Key& key) 的 Hash 类应该返回 size_t 或者可能是 unsigned long int(?) 而不是字符串。
我可以通过网络搜索和编译器错误消息找到该信息,但在草稿中找不到。
draft 没有类似的信息吗?还是因为我不知道如何阅读而错过了这些信息?
【问题讨论】:
-
标准定义了语言,但没有教你如何使用它。我会推荐a good book。
-
如果需要,您必须为 hash 和 equal_to 提供模板特化(我认为分配器通常很好)。 en.cppreference.com/w/cpp/utility/hash.
-
那么,书籍作者和网络贡献者如何知道它?
-
这里是哈希的要求:eel.is/c++draft/utility.requirements#hash.requirements,谓词也应该在这个部分的某个地方
-
@Yksisarvinen 谢谢。我应该阅读它
标签: c++ grammar iso unordered-set