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?

Respuestas a la pregunta(7)

Su respuesta a la pregunta