qt - QVectors 的 QHash

标签 qt replace constants 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: 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/

相关文章:

c++ - 将 QString 转换为 Local8bit,然后将 String 转换为 QString

c++ - 如何借助QT中的任何API设置系统亮度?

r - 根据列值 r 更改行中的值

c++ - 可变仿函数是否仍然是 "valid"被使用

c++ - qt designer 指定的 QDialog 的 valgrind 问题

c++ - 如何确定给定的属性是否不是从基类继承的?

mysql - mysql 是否可以动态翻译存储在字符串中的 ID?

eclipse - Eclipse 中不修改大小写进行替换

memory - OpenCL:使用什么类型的内存?

C:将常量字符串转换为常规字符串