首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >QHash of QVectors

QHash of QVectors
EN

Stack Overflow用户
提问于 2013-08-17 16:58:37
回答 1查看 1.5K关注 0票数 3

我有一个QHash<QString, QVector<float> > qhash,并试图按照以下方式对QVector中的值进行处理:

代码语言:javascript
复制
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\ test\Prototype\Coordinate.cpp:266: test\Prototype\Coordinate.cpp:266: error:将'const QVector‘作为'void::替换(int,const &)的'this’参数,将T= float‘丢弃限定符-fpermissive

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-08-17 18:42:44

错误消息告诉您,您正在尝试在const实例上使用非const方法。在本例中,您试图在QVector::replace上调用const QVector。主要原因是您使用的是QHashIterator,它只从QHashIterator::value()返回const引用。

要解决这个问题,您可以在QHash上使用STL样式的迭代器而不是Java风格的迭代器。

代码语言:javascript
复制
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

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18291236

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档