I have an unordered_map
that uses a string-type as a key:
std::unordered_map<string, value> map;
A std::hash
specialization is provided for string
, as well as a
suitable operator==
.
Now I also have a "string view" class, which is a weak pointer into an existing string, avoiding heap allocations:
class string_view {
string *data;
size_t begin, len;
// ...
};
Now I'd like to be able to check if a key exists in the map using a string_view
object. Unfortunately, std::unordered_map::find
takes a Key
argument, not a generic T
argument.
(Sure, I can "promote" one to a string
, but that causes an allocation I'd like to avoid.)
What I would've liked instead was something like
template<class Key, class Value>
class unordered_map
{
template<class T> iterator find(const T &t);
};
which would require operator==(T, Key)
and std::hash<T>()
to be suitably defined, and would return an iterator to a matching value.
Is there any workaround?
See Question&Answers more detail:
os 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…