我在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));
}
以x1
和x0
作为要复制的元素的停止和起始位置。但有没有更快的方法而不是使用这个for-loop?
编辑:“更快”,我的意思是更快地输入和(不可能,如指出)更快的执行。正如已经指出的那样,values(i)
没有按预期工作,因此我将其作为伪代码保留在此处,直到找到更好的工作替换。
答案 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
这假设地图实际上有足够的元素,因此在使用之前不会测试迭代器。