5

我需要遍历 aQMultiHash并检查与每个键对应的值列表。我需要使用一个可变迭代器,这样我就可以从哈希中删除满足某些条件的项目。 该文档没有解释如何访问所有值,只是第一个。此外,API 仅提供一种value()方法。如何获取特定键的所有值?

这就是我想要做的:

QMutableHashIterator<Key, Value*> iter( _myMultiHash );
while( iter.hasNext() )
{
    QList<Value*> list = iter.values();  // there is no values() method, only value()
    foreach( Value *val, list )
    {
        // call iter.remove() if one of the values meets the criteria
    }
}
4

3 回答 3

3

对于未来的旅行者,这就是我最终为了继续使用 Java 风格的迭代器所做的事情:

QMutableHashIterator<Key, Value*> iter( _myMultiHash );
while( iter.hasNext() )
{
    // This has the same effect as a .values(), just isn't as elegant
    QList<Value*> list = _myMultiHash.values( iter.next().key() );  
    foreach( Value *val, list )
    {
        // call iter.remove() if one of the values meets the criteria
    }
}
于 2013-07-07T03:54:09.073 回答
2

使用最近的文档可能会更好:http: //doc.qt.io/qt-4.8/qmultihash.html

尤其是:

QMultiHash<QString, int>::iterator i = hash1.find("plenty");
 while (i != hash1.end() && i.key() == "plenty") {
     std::cout << i.value() << std::endl;
     ++i;
 }
于 2013-07-05T23:04:46.750 回答
1

您可以迭代 a 的所有值,QMultiHash如下所示QHash

for(auto item = _myMultiHash.begin(); item != _myMultiHash.end(); item++) {
  std::cout << item.key() << ": " << item.value() << std::endl;
}

只是如果有多个值使用同一个键,同一个键可能会出现多次。

于 2020-05-27T12:28:38.693 回答