获取 QMap 的一部分作为 QVector
Getting a part of a QMap as a 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));
}
以x1
和x0
作为要复制的元素的停止和开始位置。但是有没有比使用这个 for 循环更快的方法呢?
编辑:"faster" 我的意思是 打字速度更快,(正如指出的那样,这是不可能的)执行速度更快。正如已经指出的那样,values(i)
没有按预期工作,因此我将把它作为伪代码留在这里,直到找到 better_working 替代品。
也许这行得通:
QVector<double>::fromList(a.values().mid(x0, length));
想法是将所有值作为 double
s 的列表获取,提取您感兴趣的子列表,从而通过 [=] 的现有静态方法从该列表创建一个向量13=].
编辑
正如评论和更新后的问题中所建议的,它采用了一种输入速度较慢但速度较快的解决方案:
QVector<double> v{length};
auto it = a.cbegin()+x0;
for(auto last = it+length; it != last; it++) {
v.push_back(it.value());
}
我假设 x0
和 length
负责密钥列表的实际长度,因此 a.cbegin()+x0
是有效的并且不值得添加守卫 it != a.cend()
还有。
试试这个,应该可以,还没有测试过:
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
这假设地图实际上有足够的元素,因此迭代器在使用前没有经过测试。
我在 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 循环更快的方法呢?
编辑:"faster" 我的意思是 打字速度更快,(正如指出的那样,这是不可能的)执行速度更快。正如已经指出的那样,values(i)
没有按预期工作,因此我将把它作为伪代码留在这里,直到找到 better_working 替代品。
也许这行得通:
QVector<double>::fromList(a.values().mid(x0, length));
想法是将所有值作为 double
s 的列表获取,提取您感兴趣的子列表,从而通过 [=] 的现有静态方法从该列表创建一个向量13=].
编辑
正如评论和更新后的问题中所建议的,它采用了一种输入速度较慢但速度较快的解决方案:
QVector<double> v{length};
auto it = a.cbegin()+x0;
for(auto last = it+length; it != last; it++) {
v.push_back(it.value());
}
我假设 x0
和 length
负责密钥列表的实际长度,因此 a.cbegin()+x0
是有效的并且不值得添加守卫 it != a.cend()
还有。
试试这个,应该可以,还没有测试过:
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
这假设地图实际上有足够的元素,因此迭代器在使用前没有经过测试。