【发布时间】:2019-09-13 20:51:58
【问题描述】:
我有这张地图:
using namespace std; // just for readability
unordered_map<shared_ptr<string>, whatever_type> map;
然后从外面传来一个字符串。我可以以某种方式使用find 吗?
map.find(someInputString); // won't work, keys are wrapped by pointers
使用循环是唯一的选择吗?
附:如果find 方法或其他方法可以避免循环,我很感兴趣。
【问题讨论】:
-
我强烈建议反对使用
shared_ptr's 作为键。我无法想象为什么它可能是可取的。 -
@SergeyA 如果字符串很大,而且它们也存储在其他地方怎么办
-
您可以使用带有自定义哈希码和比较器的
unordered_map。我没有看到其他快速工作的方法。我从来没有这样做过,但可能你必须为键定义自己的包装类。 -
@SergeyA 有道理,但希望最后死去 :-) 这就是我问的原因
-
您可能必须使用自定义哈希函数和自定义比较函数来取消引用指针。您可能希望使用透明分配器。共享指针也让它变得非常奇怪,你能改变设计以使用普通的非拥有指针吗?
标签: c++ pointers unordered-map