QVectors 的 QHash

Posted

技术标签:

【中文标题】QVectors 的 QHash【英文标题】:QHash of QVectors 【发布时间】:2013-08-17 16:58:37 【问题描述】:

我有一个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] 的 'this' 参数传递' 丢弃限定符 [-fpermissive]

谁能帮我解决这个问题?

【问题讨论】:

【参考方案1】:

错误消息告诉您,您正试图在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

【讨论】:

非常感谢您的回复。完成后我会尝试并留下反馈。 @MikaelEgibyan 不客气。不要忘记接受有用的答案:***.com/help/accepted-answer :-)

以上是关于QVectors 的 QHash的主要内容,如果未能解决你的问题,请参考以下文章

QVectors2D 的 QT OpenGL QList 未正确绘制

如何从 QVector<QVector<T>> 获取 QVector<T>?

关于光的反射和折射的例子?

既是3的倍数又是5的倍数都有哪些

一个三位数既是3的倍数,又是5的倍数。这样的三位数最小是啥

数组的创建,及数组的方法