我有一个unordered_map使用字符串类型作为键:
std::unordered_map<string, value> map;
Run Code Online (Sandbox Code Playgroud)
提供std::hash专业化,也提供string合适的专业化operator==.
现在我还有一个"字符串视图"类,它是一个指向现有字符串的弱指针,避免了堆分配:
class string_view {
string *data;
size_t begin, len;
// ...
};
Run Code Online (Sandbox Code Playgroud)
现在,我希望能够使用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);
};
Run Code Online (Sandbox Code Playgroud)
这将需要operator==(T, Key)并std::hash<T>()适当地定义,并将迭代器返回到匹配值.
有没有解决方法?