QVashors的QHash

时间:2013-08-17 16:58:38

标签: qt replace const qhash qvector

我有一个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:错误:将'const QVector'作为'this'参数传递给'void QVector :: replace(int,const T&amp;)[with T = float ]'丢弃限定符[-fpermissive]

有人可以帮我解决这个问题吗?

1 个答案:

答案 0 :(得分:3)

错误消息告诉您,您尝试在const实例上使用非const方法。在这种情况下,您尝试在QVector::replace上致电const QVector。造成这种情况的主要原因是您使用QHashIterator,只返回QHashIterator::value()const个引用。

要解决此问题,您可以使用STL样式的迭代器而不是QHash上的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