gpt4 book ai didi

qt - QVectors 的 QHash

转载 作者:行者123 更新时间:2023-12-02 07:37:35 25 4
gpt4 key购买 nike

我有一个QHash<QString, QVector<float> > qhash ,并尝试覆盖 QVector 中的值如下:

void Coordinate::normalizeHashElements(QHash<QString, QVector<float> > qhash)
{
string a = "Cluster";
float new_value;
float old_value;
const char *b = a.c_str();
float min = getMinHash(qhash);
float max = getMaxHash(qhash);

QHashIterator<QString, QVector<float> > i(qhash);
while (i.hasNext())
{
i.next();
if(i.key().operator !=(b))
{
for(int j = 0; j<i.value().size(); j++)
{
old_value = i.value().at(j);
new_value = (old_value - min)/(max-min)*(0.99-0.01) + 0.01;
i.value().replace(j, new_value);
}
}
}
}

我在 i.value().replace(j, new_value); 上收到错误中风如下:

C:\Qt\latest test\Prototype\Coordinate.cpp:266: error: passing 'const QVector' as 'this' argument of 'void QVector::replace(int, const T&) [with T = float]' discards qualifiers [-fpermissive]

谁能帮我解决这个问题吗?

最佳答案

错误消息告诉您,您正在尝试在 const 实例上使用非 const 方法。在本例中,您尝试在 const QVector 上调用 QVector::replace。造成这种情况的主要原因是因为您使用的是 QHashIterator,它仅返回 QHashIterator::value() 中的 const 引用。 .

要解决此问题,您可以在 QHash 上使用 STL 样式迭代器而不是 Java 样式迭代器:

QString b("Cluster");
QHash<QString, QVector<float> >::iterator it;
for (it = qhash.begin(); it != qhash.end(); ++it)
{
if (it.key() != b)
{
for (int j=0; i<it.value().size(); j++)
{
old_value = it.value().at(j);
new_value = (old_value-min)/(max-min)*(0.99-0.01) + 0.01;
it.value().replace(j, new_value);
}
}
}

您还可以使用QMutableHashIterator而不是QHashIterator

关于qt - QVectors 的 QHash,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18291236/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com