C++;地图分配器将项目存储在向量中? 这是我想解决的问题:在C++中,map、MultIAP等迭代器缺少两个理想的特征:(1)它们不能在运行时检查以获得有效性,(2)在它们上没有定义操作符,这意味着它们不能作为另一个关联容器中的密钥使用。(我不关心操作符
这个问题有一个可能的解决方案:说服map、multimap等将它们的密钥/数据对存储在一个向量中,然后让迭代器成为一个小结构,其中包含指向向量本身的指针和一个下标索引。然后可以比较两个迭代器(至少对于同一个容器),通过比较它们的下标索引,可以在运行时测试迭代器是否有效C++;地图分配器将项目存储在向量中? 这是我想解决的问题:在C++中,map、MultIAP等迭代器缺少两个理想的特征:(1)它们不能在运行时检查以获得有效性,(2)在它们上没有定义操作符,这意味着它们不能作为另一个关联容器中的密钥使用。(我不关心操作符,c++,iterator,allocator,C++,Iterator,Allocator,这个问题有一个可能的解决方案:说服map、multimap等将它们的密钥/数据对存储在一个向量中,然后让迭代器成为一个小结构,其中包含指向向量本身的指针和一个下标索引。然后可以比较两个迭代器(至少对于同一个容器),通过比较它们的下标索引,可以在运行时测试迭代器是否有效 这个解决方案是在标准C++中实现的吗?特别是,我可以为map类定义“分配器”以实际将项放入向量中,然后将分配器::指针类型定义为上一段中描述的小结构吗?映射的迭代器如何与分配器::指针类型相关?分配器::指针必须是实际的指针,还是
这个解决方案是在标准C++中实现的吗?特别是,我可以为map类定义“分配器”以实际将项放入向量中,然后将分配器::指针类型定义为上一段中描述的小结构吗?映射的迭代器如何与分配器::指针类型相关?分配器::指针必须是实际的指针,还是可以是任何支持取消引用操作的指针
更新2013-06-11:我不理解这些回答。如果(键,数据)对存储在一个向量中,那么获得给定下标的项是O(1),只比使用直接指针稍微差一点,因此渐近性没有变化。为什么响应者说映射迭代器“不存在”?该标准规定,只要迭代器引用的项没有被删除,迭代器就仍然有效。至于“真正的问题”:假设我对符号表使用多重映射(变量名->存储位置;它是多重映射而不是映射,因为内部作用域中的变量名可能会对同名的变量进行阴影处理),然后说现在我需要由变量设置键的第二个数据结构。显然最简单的解决方案是使用迭代器作为第二个映射的键,将其映射到第一个映射中变量名称的特定实例,如果迭代器只有一个操作符就可以了 如果您能够以某种方式“说服”
map
将其对存储在一个向量中,您将从根本上改变map
上的某些(至少两个)保证:
插入
,删除
和查找
的复杂性将不再是对数insert
将不再能够保证未受影响迭代器的有效性,因为底层的向量
有时需要重新分配map
将其对存储在一个向量中,您将从根本上改变map
上的某些(至少两个)保证:
插入
,删除
和查找
的复杂性将不再是对数insert
将不再能够保证未受影响迭代器的有效性,因为底层的向量
有时需要重新分配我想知道您试图解决的真正问题是什么?如果您这样做,您将失去在O(logn)时间内插入和删除元素的能力,这是
std::map
和朋友所必需的。您可以为地图使用自定义比较函数。您想要解决的真正问题是什么?如果您这样做,您失去了在O(logn)时间内插入和删除元素的能力,这是std::map
和friends所必需的。您可以对地图使用自定义比较函数。您想要解决的真正问题是什么?