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更好的方法。这些“洞”取决于删除某些对象,还是也取决于插入临时关键点?