重复项的 QMultiHash insert() 行为
QMultiHash insert() behavior for duplicates
我有一个QMultiHash<Key, Value*>
. 我可能每个Key
有多个Value*
,所以我确实想存储对应于每个Key
的每个Value*
,但我不想在key1 == key2 && value1 == value2
多次的地方存储完全相同的重复项。
如果我使用哈希中已有的Key/Value*
对调用QMultiHash::insert( Key, Value* )
,它会添加第二个副本吗? 换句话说,如果我使用相同的Key/Value*
对多次调用insert()
,然后调用QMultiHash::values( Key )
我会得到一次相同的Value*
,还是会得到一个列表,其中Value*
出现的次数与我调用插入的次数相同?
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++程序员应该对精心设计的类的期望。
不,您不会只取回一次Value*
。 每次调用插入时,您都会得到一个副本。 QMultiHash::values( key )
将返回一个QList<Value*>
,其中包含与调用QMultiHash::insert()
相同数量的重复项 这是通过运行测试以查看会发生什么来确定的。
- 理解boost::asio-async_read在无需读取内容时的行为
- 模板-模板参数推导:三个不同的编译器三种不同的行为
- arr[-1]在c++中的奇怪行为
- 继承期间显示未知行为的子类
- 如何在c++中使用引用实现类似python的行为
- G锁定铸造到基础上会释放模拟行为
- 在C++中对T*类型执行std::move的意外行为
- Insert函数不适用于2 if语句C++
- std::当在256字节边界上写入整数时,流的奇怪行为
- 不知道某个东西是否被忽略会引入未定义的行为吗
- 奇怪的构造函数行为
- 重载运算符new[]的行为取决于析构函数
- 不同语言中相同代码的不同行为
- 当通知迭代器参数初始化为空列表的开头时,list::insert 行为是什么?
- 与C++std::map::insert行为相比,C#排序字典的效率
- 运算符 [] 和 insert() 函数在 C++ 映射中的行为方式不应该相同吗?
- std::move在vector::insert和push_back上的行为不同
- 重复项的 QMultiHash insert() 行为
- searchtree类的insert函数行为不端
- 如何根据插入对的存在来实现不同的“std::map insert()”行为