STD :: UNOREDED_MAP的自定义分配器以设置增量值
custom allocator for std::unordered_map to set a incremental value
我有以下类型:
std::unordered_map<std::string, int> map;
int
字段是字符串的索引,其他人将使用。现在,如果有人以这种方式查询此地图:int id = map["foo"]
,并且如果foo
不在地图中,那么我希望地图将新键添加为foo
并将其值设置为 map.size()
(假设说,请说。不会删除任何元素,因此只需使用map.size(),因为新索引是可以接受的)。
我可以这样做吗?(例如,将分配器设置为模板参数)
还是有更好的数据结构可以做到这一点?(我考虑过设置或无序集,但是从集合中获取索引似乎太复杂了)
所以我可以这样做吗?(例如,将Alloctor设置为模板参数)
不是真的。您可以设置分配器,但是分配器的目的是每当容器请求时分发内存。您无法便便提供可以执行您想要的事情的分配器,因为您无法预测容器将如何在标准库实施中使用分配器。
您想做的也是一个黑客。仅应提供分配器来管理自定义内存资源,他们不应该期望做更多的事情,而不是遵守标准的分配要求。
,如果所有人都希望做的是提供主要是 a std::unordered_map
,但对operator[]
进行了调整,那么通往它的路径很容易:
template<typename K, typename V, typename... OtherArgs>
struct my_uomap : std::unordered_map<K, V, OtherArgs...> {
using my_uomap::unordered_map::unordered_map; // Inherit the c'tors
V& operator[](K const& k) {
// Do something custom
}
// And the other overload too
};
不要让反对者对从标准库容器继承继承的恐惧。仅当您通过删除对象多态对象,这才是一个问题。即使您应该记住这一点,也很少使用标准容器。
相关文章:
- 为不同配置设置MSVC_RUNTIME_LIBRARY的正确方法是什么
- 在C++/Linux中设置单调时钟的一些技巧
- 如何在选项卡视图Qt中设置一个新项目,并保存以前的项目
- 嵌套在类中时无法设置成员数据
- 需要帮助设置在C++中使用的Potrace
- 如何在自删除后将对象设置为nullptr
- 将指针设置为"nullptr"并不能防止双重删除?
- 如何在Ubuntu中使用cmake设置qt4
- ld:bind_at_load和-bitcode_bundle(Xcode设置ENABLE_bitcode=YES)不能
- 如何在boost beast http请求中设置http头
- 如何解决gcc编译器优化导致的centos双编译器设置中的分段错误
- 如何将这个C++哈希表转换为动态扩展和收缩,而不是使用硬设置的最大值
- 为什么文件名被设置为一个点,而不是在读取矢量中的文件名时
- 如何在24位SDL_Surface上设置像素的颜色
- std::设置自定义比较器
- 如何设置一个范围来提取我想要获得的信息
- 如何在NS-3中使用Ramdomwaypoint模型时设置位置分配器
- STD :: UNOREDED_MAP的自定义分配器以设置增量值
- forward_list,设置,列表等如何调用标准::分配器
- 构造函数在哪里获取/设置默认分配器