Qt中列表和哈希的组合
我需要一个数据结构,其中每个元素都有一个特定的索引,但也可以使用键进行检索 我需要在Qt中进行模型视图编程的数据结构。 一方面,视图要求特定行中的元素。 另一方面,模型希望使用给定的键插入和修改图元。 这两个操作都应在O(1)中运行 以下是我想要的示例: 该视图显示以下内容:Qt中列表和哈希的组合,qt,list,data-structures,hash,model-view,Qt,List,Data Structures,Hash,Model View,我需要一个数据结构,其中每个元素都有一个特定的索引,但也可以使用键进行检索 我需要在Qt中进行模型视图编程的数据结构。 一方面,视图要求特定行中的元素。 另一方面,模型希望使用给定的键插入和修改图元。 这两个操作都应在O(1)中运行 以下是我想要的示例: 该视图显示以下内容: list[0]: "Alice", aged 22 list[1]: "Carol", aged 15 list[2]: "Bob", aged 23 模型显示: hash["Alice"]: "Alice", aged
list[0]: "Alice", aged 22
list[1]: "Carol", aged 15
list[2]: "Bob", aged 23
模型显示:
hash["Alice"]: "Alice", aged 22
hash["Bob"]: "Bob", aged 23
hash["Carol"]: "Carol", aged 15
我的想法如下:我有一个QList
和一个QHash
。
散列指向列表中存储相应元素的位置。
这是插入/编辑值的代码:
if (hash.contains(key))
*hash[key] = value;
else
{
int i = list.size();
list << value;
hash[key] = &list[i];
}
if(hash.contains(key))
*散列[键]=值;
其他的
{
int i=list.size();
list方法1:您可以将列表索引存储在哈希中,而不是指针。然后您还有一个间接寻址(从哈希中获取索引,然后从列表中检索),但仍然是O(1)。速度上的差异应该不会太大
方法2:列表和哈希都使用指针操作。然后它们将保持有效。但是,基于索引或键的删除将变为O(n),因为您必须在非对应容器中手动查找对象
我也不知道你想如何解决索引删除或中间插入的问题。在这两种情况下,哈希都会指向错误的条目(在方法和方法1中都是)。在这里,您将不得不使用方法2。
索引值是否必须是“true”索引。(即,当项目添加到列表中时,它会相应更改),还是像QHash
键一样必须是唯一的?索引必须是“true”索引。它代表项目在视图中的位置。我只是想评论一下,删除不适用于方法1,但你是对的,它也不能用于我的解决方案…我可能还没有测试过,但我的问题是EADY在插入时发生了。我不太喜欢使用指针的想法,但我可能会认为它是最好的解决方案。