我需要存储QSet [QTime](或类似的)数据。我想要做的是获得范围内的元素子集,其中A和B可能不存在,即
vector [int] 5 7 9 11 13 范围(6,11)=> 7 9 11
有可能吗?也许还有更好的方法吗? 感谢您的建议
答案 0 :(得分:1)
显而易见的解决方案是std::set<QTime>
。它是有序的,并提供lower_bound
和upper_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
确实有顺序,这是给我的消息!)