std :: unordered_map :: find usando un tipo diferente al tipo de clave?
Yo tengo ununordered_map
que usa un tipo de cadena como clave:
std::unordered_map<string, value> map;
A std::hash
se proporciona especialización parastring
, así como un adecuadooperator==
.
Ahora también tengo una clase de "vista de cadena", que es un puntero débil en una cadena existente, evitando asignaciones de montón:
class string_view {
string *data;
size_t begin, len;
// ...
};
Ahora me gustaría poder verificar si existe una clave en el mapa usando unstring_view
objeto. Desafortunadamente,std::unordered_map::find
toma unaKey
argumento, no un genéricoT
argumento.
(Claro, puedo "promocionar" uno a unstring
, pero eso provoca una asignación que me gustaría evitar).
Lo que me hubiera gustado era algo así
template<class Key, class Value>
class unordered_map
{
template<class T> iterator find(const T &t);
};
lo cual requeriríaoperator==(T, Key)
ystd::hash<T>()
estar adecuadamente definido y devolvería un iterador a un valor coincidente.
¿Hay algún trabajo alrededor?