Qt 在QMap中查找丢失的密钥
我有一个Qt 在QMap中查找丢失的密钥,qt,qmap,Qt,Qmap,我有一个qmap的 该键的范围为1到n\u max 当我插入地图时,我需要知道最低的可用未使用密钥 例如,如果地图包含 当我在地图中插入下一项时,我希望将密钥分配为2 做这件事最有效的方法是什么 关于为了优化搜索,您可能需要做一些事情 首先,对照map.end()以前的记录(即,--)检查count()。如果它们是相同的,你知道它是满的,可以在最后添加 如果不是(结束迭代器值大于count()),则您知道需要搜索孔。在搜索一个整体时,您可能希望拉出所有的uniqueKeys(),然后从中间开
qmap
的
该键的范围为1
到n\u max
当我插入地图时,我需要知道最低的可用未使用密钥
例如,如果地图包含
当我在地图中插入下一项时,我希望将密钥分配为2
做这件事最有效的方法是什么
关于为了优化搜索,您可能需要做一些事情 首先,对照map.end()以前的记录(即,--)检查
count()。如果它们是相同的,你知道它是满的,可以在最后添加
如果不是(结束迭代器值大于count()
),则您知道需要搜索孔。在搜索一个整体时,您可能希望拉出所有的uniqueKeys()
,然后从中间开始搜索,查看中间的键是否与前面的count()/2
匹配。如果没有,则按另一个count()/4
进一步向下,否则按count()/4
向上。重复,直到你找到你要找的
但事实上,我不确定地图是不是合适的容器。听起来你需要一个数组或者链表或者。。。这取决于你的数据。但是如果你需要用一个地图来做以上操作,我建议你需要找到正确的容器。 < P>因为Qmap保持按键排序的项,所以可以使用C++标准库中的邻接查找算法:
#include <QMap>
#include <algorithm>
bool missing (int i, int j) {
return (i+1 < j);
}
int next_key(const QMap<int,int>& map) {
if (!map.size())
return 1; // or 0, if an acceptable key value
QList<int>::iterator i = std::adjacent_find(map.keys().begin(), map.keys().end(), missing);
if (i==map.keys().end()) // no missing values found
--i;
return *i + 1;
}
#包括
#包括
布尔缺失(整数i,整数j){
返回(i+1
复杂性正好是谓词(“缺失”函数)的(result-first)+1和(last-first)-1应用程序中较小的一个,其中result是返回值。有很多方法可以做到这一点,但效率不是很高。如果您告诉我们关键点是如何创建的,我们可能会给您提供一种比QMap更好的方法。这些“洞”取决于删除某些对象,还是也取决于插入临时关键点?