QHash QVectors

У меня есть 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' в качестве 'этого' аргумента 'void QVector::replace (int, const T&) [with T = float]' отбрасывает квалификаторы [-fразрешительный]

может ли кто-нибудь помочь мне исправить это?


person SuTron    schedule 17.08.2013    source источник


Ответы (1)


Сообщение об ошибке сообщает вам, что вы пытаетесь использовать метод, отличный от const, для экземпляра const. В этом случае вы пытаетесь вызвать QVector::replace на const QVector. Основная причина этого в том, что вы используете QHashIterator, который возвращает только const ссылок из QHashIterator::value() .

Чтобы исправить это, вы можете использовать итератор в стиле STL вместо итератора в стиле Java для QHash:

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.

person RA.    schedule 17.08.2013
comment
Большое спасибо за Ваш ответ. Я попробую и оставлю отзыв, как только закончу. - person SuTron; 18.08.2013
comment
@MikaelEgibyan Пожалуйста. Не забудьте принять полезные ответы: stackoverflow.com/help/accepted-answer :-) - person RA.; 18.08.2013