【发布时间】:2010-11-29 18:52:54
【问题描述】:
我正在迭代的向量中有一组有序的键/值映射。我知道一个唯一键,基于此,我需要在它之前和之后获取键/值对,直到达到限制。例如:
QVector < QMap < QString, QString > > map;
QMap < QString, QString > temp;
temp.insert("key1", "parent");
map.append(temp);
temp.clear();
temp.insert("key2", "value1");
map.append(temp);
temp.clear();
temp.insert("key3", "value2");
map.append(temp);
temp.clear();
temp.insert("key4", "value3");
map.append(temp);
temp.clear();
temp.insert("key5", "parent");
map.append(temp);
假设我有一个值“key3”,我想在“key3”之前获取键/值对,直到达到“parent”,然后在它之后直到达到“parent”(不包括“parent”) , 我该怎么做呢?我想不出一个简单的方法。
QMap < QString, QString > newMap;
QMap < QString, QString >::iterator i;
for (int i = 0; i < map.size(); ++i) {
QMap < QString, QString > vectorMap = map.at(i);
for (j = vectorMap.begin(); j != vectorMap.end(); ++j) {
if (j.key() == "key3") {
//set a bool to true and
//get j.key() and j.value() before and after until "parent" is reached
newMap.insert(j.key(), j.value());
}
}
}
newMap 会有键/值对(“key2/value1”、“key3/value2”、“key4/value3”);
针对我现在正在尝试的内容进行了编辑:
QString selection = "key3";
//for going backwards, still need to go forward
for (int i = 0; i < map.size(); ++i) {
QMap < QString, QString > vectorMap = map.at(i);
QMapIterator < QString, QString > iter(vectorMap);
while (iter.hasNext()) {
iter.next();
if (iter.key() == selection && iter.value() != "parent") {
do {
previousText = iter.previous();
tempMap.insert(iter.key(), iter.value());
newMap.append(tempMap);
tempMap.clear();
qDebug() << "previousText" << previousText;
iter.previous();
} while (previousText != "parent");
}
}
}
【问题讨论】:
-
“我想在 'key3' 之前获取键/值 paris 直到达到 'parent',然后在它之后直到达到 'parent'',我该怎么做?”
-
好的,我想我对你真正想要做什么有了更好的了解。给定一些键,您希望将每个
QMap存储在您的QVector< QMap >中,并在该QMap中的“父”值之间插入所有内容,前提是该映射段包含您的键。 -
是的!我想不出一个体面的方法来做到这一点。我上面的编辑代码抛出一个错误,我仍然不确定它是最简单的解决方案。
-
@user375566,我已经更新了我的代码来做你想做的事,但它是高度未经测试的,因为我不再使用 C++/Qt 工作。评论它,这样你就知道我至少想表达什么。
-
QVector 中的每个 QMap 是否总是只包含 1 个键值对?如果是这样,为什么不直接使用 QMap 呢?