我想在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映射的包装器)
现在我不确定如何实现插入功能。除此之外,我已经想出了如何删除(重新保护默认值)以及如何搜索(使用stl的地图查找)。 所以我现在唯一的问题是插入方法。
我想过迭代地图并寻找第一个免费的细胞,但它让我感到困惑,我被困住了。 任何其他想法都会很棒。
答案 0 :(得分:1)
如果我理解得很好,你就可以制作一个标准容器的包装,即地图。
在构造时,您打算插入几个相同的默认键。 std::map
中不允许这样做,其中键必须是唯一的。
如果您想在地图中使用多次相同的密钥,则必须使用multimap
:您几乎可以将其用作地图,但它允许使用重复的密钥。
我不确定您为什么要使用默认密钥创建项目,但您必须知道地图和多地图可以使用有序密钥。因此,如果您打算稍后将默认密钥替换为另一个密钥,则不能仅替换值:您必须删除该条目并插入新条目。
答案 1 :(得分:0)
std::map中的键是唯一的,因此您在构造中所做的事情没有意义。
如果你寻求出色的表现(因为嵌入式世界可能就是这种情况),那么我建议你找some other hash table implementation。 您还可以实现自己的哈希表以满足您的需求。
答案 2 :(得分:0)
对于嵌入式系统,我认为你实际上想要的是自定义内存分配器。您可以为要使用的每个数据结构定义分配池。然后将它传递给地图的构造函数,它将从池中分配数据。当池为空时,它将发出bad_alloc
个例外。