我有一个 unordered_map
使用字符串类型作为键:
std::unordered_map<string, value> map;
为 --- 提供了一个 std::hash
string
,以及一个合适的 operator==
。
现在我还有一个“字符串视图”类,它是一个指向现有字符串的弱指针,避免了堆分配:
class string_view {
string *data;
size_t begin, len;
// ...
};
现在我希望能够使用 string_view
对象检查地图中是否存在键。不幸的是, std::unordered_map::find
采用 Key
参数,而不是通用的 T
参数。
(当然,我可以将一个“提升”为 string
,但这会导致我想避免分配。)
相反,我会喜欢的是
template<class Key, class Value>
class unordered_map
{
template<class T> iterator find(const T &t);
};
这将需要 operator==(T, Key)
和 std::hash<T>()
进行适当定义,并将迭代器返回到匹配值。
有什么解决方法吗?
原文由 peppe 发布,翻译遵循 CC BY-SA 4.0 许可协议
P0919R2 无序容器的异构查找 已合并到 C++2a 的工作草案中!
摘要似乎与我最初的问题完美匹配:-)