Qt 6.1在其集合类QByteArray
、QHash
、QList
、QMap
、QMultiHash
、QMultiMap
、QString
和QVarLengthArray
中引入了removeIf(Predicate Pred)
方法。
但是我怎么写一个谓词呢?
以QHash
为例:
struct MishMash {
int i;
double d;
QString str;
enum Status { Inactive=0, Starting, Going, Stopping };
Status status;
};
QHash<QString, MishMash> myHash;
// ... fill myHash with key-value pairs
// Now remove elements where myHash[key].status == MishMash::Status::Inactive;
myHash.removeIf(???);
从文档…
函数支持接受类型参数的谓词Key, T>::迭代器,或std::pair
在这种情况下,您应该能够使用lambda
沿着(未经测试)…
myHash.removeIf(
[](QHash<QString, MishMash>::iterator i)
{
return i.value().status == MishMash::Status::Inactive;
}
);