1.概要
2.内容
QHash<int,QHash<int,MyUiComeraState*>> stateHash; 遍历有多少种方式,只遍历values
1.遍历有多少种方式,只遍历values
在 Qt 中,QHash
是一个基于哈希表的容器,它提供了快速的插入、删除和查找操作。对于嵌套的 QHash
,如 QHash<int, QHash<int, MyUiComeraState*>>
,你可以通过不同的方式遍历其值(values)。
如果你只想遍历所有的 MyUiComeraState*
值,你有几种方式可以实现。以下是一些常见的方法:
方法一:使用嵌套的迭代器
QHash<int, QHash<int, MyUiComeraState*>> stateHash;
// 假设 stateHash 已经被填充了数据
QHash<int, QHash<int, MyUiComeraState*>>::iterator outerIt = stateHash.begin();
while (outerIt != stateHash.end()) {
QHash<int, MyUiComeraState*>& innerHash = outerIt.value();
QHash<int, MyUiComeraState*>::iterator innerIt = innerHash.begin();
while (innerIt != innerHash.end()) {
MyUiComeraState* state = innerIt.value();
// 处理 state
++innerIt;
}
++outerIt;
}
方法二:使用范围基的 for 循环(C++11 及以上)
QHash<int, QHash<int, MyUiComeraState*>> stateHash;
// 假设 stateHash 已经被填充了数据
for (const auto& outerPair : stateHash) {
const QHash<int, MyUiComeraState*>& innerHash = outerPair.value();
for (const auto& innerPair : innerHash) {
MyUiComeraState* state = innerPair.value();
// 处理 state
}
}
方法三:使用 Qt 的 foreach
宏(不推荐在新代码中使用,因为 C++11 提供了更好的范围 for 循环)
QHash<int, QHash<int, MyUiComeraState*>> stateHash;
// 假设 stateHash 已经被填充了数据
foreach (const QHash<int, MyUiComeraState*>& innerHash, stateHash) {
foreach (MyUiComeraState* state, innerHash) {
// 处理 state
}
}
方法四:使用 Java 风格的迭代器(较少使用)
QHash<int, QHash<int, MyUiComeraState*>> stateHash;
// 假设 stateHash 已经被填充了数据
foreach (const QHash<int, MyUiComeraState*>& innerHash, stateHash) {
foreach (MyUiComeraState* state, innerHash) {
// 处理 state
}
}
总结
对于只遍历 QHash<int, QHash<int, MyUiComeraState*>>
中的 MyUiComeraState*
值,最常见和推荐的方法是使用嵌套的范围 for 循环(C++11 及以上),因为它简洁且易读。如果你使用的是较旧的 C++ 标准,可以选择使用嵌套的传统迭代器方法。foreach
宏虽然方便,但在现代 C++ 代码中不推荐使用。Java 风格的迭代器在 Qt 中支持,但使用相对较少。选择哪种方法取决于你的具体需求和代码风格。