获取受不存在元素限制的QSet子集

Getting subset of QSet limited by non-existent elements

本文关键字:QSet 子集 不存在 元素 获取      更新时间:2023-10-16

我需要存储QSet[QTime](或类似的)数据。我想要做的是获取range中元素的子集,其中A和B可能不存在,即

vector[int] 5 7 9 11 13Range (6, 11) => 7 9 11

有可能吗?也许有更好的方法?谢谢你的建议

显而易见的解决方案是std::set<QTime>。并给出了lower_bound法和upper_bound法。

当然可以编写代码来做到这一点,但是QSet是一个"无序"集合,没有特别有效的操作来完成您的要求。您几乎必须枚举它们并测试每个元素以确定它是否符合条件:

QSet<QTime> set;
QTime earliest = QTime::fromString("1.30", "m.s");
QTime latest = QTime::fromString("10.30", "m.s");
...
QSet<QTime> subset;
QSetIterator<QTime> i (set);
while (i.hasNext()) {
    QTime t = i.next();
    if ((t >= earliest) && (t <= latest)) {
        subset.insert(t);
    }
}

如果这对你的目的来说不够快,你将不得不使用不同的数据结构和技术。如果你想让你的子集排序,那么你需要将它存储在一个有序的集合中,但我不会真正称之为"子集",而是更像是"子范围"或"切片"。(在计算机科学中,"集合"一词通常意味着元素的顺序对应用程序不感兴趣……但是@MSalters指出std::set 确实有秩序,这对我来说是新闻!)