用预定义的大小在C++中实现Map
Implement Map in C++ with a predefined size
我想用C++实现我自己版本的映射数据结构。我需要预先定义它的大小,所以我决定当用户创建地图时,他不仅要指定大小,还要指定键和值的默认值。在你问之前-我需要这个,以便能够在嵌入式系统中使用该数据结构。
我已经写了这个构造函数:
template <typename T, typename K>
myMap<T, K>::myMap(int size, const T& keyInit, const K& valueInit) :
size(nSize), defaultKey(keyInit), defaultValue(valueInit)
{
for (int i = 0; i < nSize; i++)
{
container.insert(std::make_pair(keyInit,valueInit));
}
}
其中container
是类型为std::map<T, K>
的成员(基本上该类只是stl映射的包装器)
现在我不知道如何实现insert函数。除此之外,我还弄清楚了如何删除(重新设置默认值)和如何搜索(使用stl的maps-find)。所以我现在唯一的问题是insert方法。
我想过在地图上迭代,寻找第一个空闲的单元格,但这让我很困惑,我被卡住了。任何其他想法都很好。
如果我理解得很好,您可以为标准容器(即映射)制作一个包装器。
在构造时,您打算插入几个相同的默认关键点。这在std::map
中是不允许的,其中密钥必须是唯一的。
如果你想在地图中多次使用同一个关键点,你必须使用multimap
:你几乎可以把它用作地图,但它允许有重复的关键点。
我不知道为什么要用默认键创建项目,但必须注意映射和多映射使用有序键。因此,如果您以后打算用另一个替换默认键,则不能只替换值:您必须删除条目并插入一个新条目。
std::map中的键是唯一的,因此您在构造时所做的操作没有意义。
如果您希望获得出色的性能(在嵌入式世界中可能就是这样),那么我建议您寻找其他哈希表实现。您还可以实现自己的哈希表来满足您的需求。
对于嵌入式系统,我认为实际上想要的是自定义内存分配器。您可以为要使用的每个数据结构定义一个分配池。然后将它传递给映射的构造函数,它将从池中分配数据。当池为空时,它将发送bad_alloc
异常。
- 如果没有malloc,链表实现将失败
- 如何在c++中实现处理器调度模拟器
- 如何在c++中使用引用实现类似python的行为
- 实现无开销push_back的最佳方法是什么
- 使用简单类型列表实现的指数编译时间.为什么
- 如何在BST的这个简单递归实现中消除警告
- 实现一个在集合上迭代的模板函数
- 我应该实现右值推送功能吗?我应该使用std::move吗
- 如何正确实现和访问运算符的各种自定义枚举器
- C++Union/Struct位域的实现和可移植性
- 这个极客对极客的trie实现是否存在内存泄漏问题
- 在c++中实现LinkedList时,应出现未处理的错误
- 为左值和右值的包装器实现C++范围
- 使用模板进行堆栈实现; "name followed by :: must be a class or namespace"
- 使用GSoap实现ONVIF
- 在用于格式4的arm模拟器中实现功能时的一个问题
- 用于AVX的ln(x)的实现,m256
- 用常见虚拟函数实现的任意组合来实现派生类的正确方法是什么
- 在C++中,如何在类和函数(可能是模板化的)的头中编写完整的实现
- std::random_device是如何实现的