c++ - 重复项的 QMultiHash insert() 行为

标签 c++ qt data-structures qt4 hashtable

我有一个 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*发生的次数与我调用插入的次数相同吗?

最佳答案

没有。 QMultiHash ,根据定义,允许多个值与给定键相关联。那是 QMultiHash 的“Multi”部分。例如,

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++ 程序员对设计良好的类的期望。

关于c++ - 重复项的 QMultiHash insert() 行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17683782/

相关文章:

c++ - 如果不包含 pthread,为什么 GCC 的线程标准库实现会抛出异常?

c++ - 我可以将运算符作为参数发送给函数吗?

c++ - 将二进制数据从 QML 传递到 C++

qt - 如何使用 QTreeView 和 QFileSystemModel 只显示包含特定文件的文件夹?

algorithm - 给定一个由 0 和 1 组成的 m x n 矩阵,如果一个元素为 0,则将其整个行和列设置为 0

java - Java中有单键多值数据结构吗?

java - 在多个线程中使用相同的 OpenGL 上下文

c++ - 换行不适用于 C++ 中的文件?

即使包含 shell32.lib,Qt 也无法打开 shell32.lib

c++ - 错误(Id)返回 1 退出状态