У меня есть unordered_map
, который использует строковый тип в качестве ключа:
std::unordered_map<string, value> map;
A std::hash
специализация предоставляется для string
, а также
подходящий operator==
.
Теперь у меня также есть класс "string view", который является слабым указателем на существующую строку, избегая выделения кучи:
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>()
были соответствующим образом определены и вернули итератор в соответствующее значение.
Есть ли способ обхода?