使QSet的子集受到不存在的元素的限制

时间:2011-10-24 09:49:38

标签: c++ qt

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

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

有可能吗?也许还有更好的方法吗? 感谢您的建议

2 个答案:

答案 0 :(得分:1)

显而易见的解决方案是std::set<QTime>。它是有序的,并提供lower_boundupper_bound方法。这些不要求实际边界存在于集合中。

答案 1 :(得分:0)

编写代码当然可以做到这一点,但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);
    }
}

如果这不足以达到您的目的,您将不得不使用不同的数据结构和技术。如果你想要对你的子集进行排序,那么你需要将它存储在一个有序的集合中,但是我不会把它称为“子集”,而是更像是“子范围”或“切片”。 (计算机科学中的“set”一词通常意味着元素的顺序对应用程序来说并不感兴趣......但@MSalters指出std::set 确实有顺序,这是给我的消息!)