将QMap的一部分作为QVector

时间:2015-11-14 09:41:48

标签: qt qmap qvector

我在QMap<double, double> a - 元素中有一些元素。现在我想得到一些a值的向量。最简单的方法是(对我而言):

int length = x1-x0;
QVector<double> retVec;
for(int i = x0; i < length; i++)
{
    retVec.push_back(a.values(i));
}

x1x0作为要复制的元素的停止和起始位置。但有没有更快的方法而不是使用这个for-loop?

编辑:“更快”,我的意思是更快地输入和(不可能,如指出)更快的执行。正如已经指出的那样,values(i)没有按预期工作,因此我将其作为伪代码保留在此处,直到找到更好的工作替换。

2 个答案:

答案 0 :(得分:1)

也许这有效:

QVector<double>::fromList(a.values().mid(x0, length));

我们的想法是将所有值作为double列表获取,提取您感兴趣的子列表,从而通过已存在的{{1}静态方法从该列表中创建一个向量}。

修改

正如在评论和更新的问题中所建议的那样,它是一种较慢的类型但更快的解决方案:

QVector

我认为QVector<double> v{length}; auto it = a.cbegin()+x0; for(auto last = it+length; it != last; it++) { v.push_back(it.value()); } x0会处理密钥列表的实际长度,因此length有效,并且添加后卫{{}不值得1}}。

答案 1 :(得分:0)

试试这个,不应该工作,没有经过测试:

int length = x1-x0;
QVector<double> retVec;
retVec.reserve(length); // reserve to avoid reallocations
QMap<double, double>::const_iterator i = map.constBegin();
i += x0; // increment to range start
while (length--) retVec << i++.value(); // add value to vector and advance iterator

这假设地图实际上有足够的元素,因此在使用之前不会测试迭代器。