我有QMultiHash<Key, Value*>
。我可能每个Value*
有多个Key
,所以我确实要存储与每个Value*
对应的每个Key
,但我不想存储精确的副本key1 == key2 && value1 == value2
不止一次。
如果我使用已在哈希中的QMultiHash::insert( Key, Value* )
对调用Key/Value*
,是否会添加第二个副本?换句话说,如果我使用相同的insert()
对多次呼叫Key/Value*
,然后拨打QMultiHash::values( Key )
,我将获得相同的Value*
一次,或者我会获得Value*
列表与我调用插入的次数相同?
答案 0 :(得分:2)
没有。根据定义,QMultiHash
允许与给定键关联的多个值。那是QMultiHash
的“多”部分。例如,
QMultiHash<int, int> multi; //multi.size() = 0
multi.insert(5, 1); //multi.size() = 1
multi.insert(5, 2); //multi.size() = 2
QList<int> list(multi.values(5);) //list = {2, 1};
如果要强制使用唯一键,则应使用QHash将此事实传达给其他程序员,并在插入之前检查'QHash::contains(key)'。另请注意,广告订单很重要!
同样,QMultiHash
允许重复键值对,而不仅仅是重复键。例如,
QMultiHash<int, int> multi; //multi.size() = 0
multi.insert(5, 2); //multi.size() = 1
multi.insert(5, 2); //multi.size() = 2
QList<int> list(multi.values(5);) //list = {2, 2};
如果您希望使用单个键允许多个值,但仍然强制使用唯一键值对,则必须在使用QMultiHash::contains(key, value)
插入之前手动检查唯一对。
这两个事实都是Qt中的预期功能,这给程序员带来了强制执行唯一性的负担,而不是在每次插入时对性能进行检查。这就是C ++程序员应该从精心设计的类中获得的。
答案 1 :(得分:0)
不,你不会只回到Value*
一次。每次调用插入时,您都会得到一份副本。 QMultiHash::values( key )
将返回QList<Value*>
,其中包含与QMultiHash::insert()
调用相同数量的重复项。这是通过运行测试来确定会发生什么来确定的。