1

我有一个QMultiHash<Key, Value*>. 我可能有不止一个,所以我确实想存储与 each 对应的每个Value*,但我不想在不止一次的地方存储完全相同的副本。 KeyValue*Keykey1 == key2 && value1 == value2

如果我QMultiHash::insert( Key, Value* )Key/Value*已经在哈希中的一对调用,它会添加第二个副本吗?换句话说,如果我insert()用同一对多次调用Key/Value*,然后调用QMultiHash::values( Key )我会返回相同的Value*一次,还是会得到一个列表,其中Value*出现的次数与我调用插入的次数相同?

4

2 回答 2

2

No.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++ 程序员应该从一个设计良好的类中得到的。

于 2013-07-19T16:32:32.563 回答
0

不,你不会Value*只回来一次。每次调用插入时,您将获得一份副本。 QMultiHash::values( key )将返回QList<Value*>包含与调用相同数量的重复项的 a ,QMultiHash::insert() 这是通过运行测试来确定会发生什么。

于 2013-07-16T19:08:33.247 回答