相关疑难解决方法(0)

std :: unordered_map :: find使用与Key类型不同的类型?

我有一个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>()适当地定义,并将迭代器返回到匹配值.

有没有解决方法?

c++ unordered-map c++11

27
推荐指数
4
解决办法
4207
查看次数

标签 统计

c++ ×1

c++11 ×1

unordered-map ×1