我需要迭代QMultiHash
并检查与每个键对应的值列表。我需要使用一个可变迭代器,所以如果符合某些条件,我可以从哈希中删除项目。 The documentation没有解释如何访问所有值,只是第一个。此外,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
}
}
答案 0 :(得分:2)
对于未来的旅行者来说,这就是我最终要继续使用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
}
}
答案 1 :(得分:1)
可能更好地使用最近的文档: 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;
}
答案 2 :(得分:1)
您可以像简单的QMultiHash
一样遍历QHash
的所有值:
for(auto item = _myMultiHash.begin(); item != _myMultiHash.end(); item++) {
std::cout << item.key() << ": " << item.value() << std::endl;
}
如果使用同一键有多个值,则同一键可能会出现几次。