Qt中列表和哈希的组合

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

我需要一个数据结构,其中每个元素都有一个特定的索引,但也可以使用键进行检索

我需要在Qt中进行模型视图编程的数据结构。 一方面,视图要求特定行中的元素。 另一方面,模型希望使用给定的键插入和修改图元。 这两个操作都应在O(1)中运行

以下是我想要的示例:

该视图显示以下内容:

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在插入时发生了。我不太喜欢使用指针的想法,但我可能会认为它是最好的解决方案。