逻辑编程问题

时间:2010-06-07 16:37:31

标签: c++

我一直试图解决这个问题很长一段时间,但我遇到了麻烦。

假设在触发器上,您会收到值。

First trigger: You get 1 
Second trigger: You get 1, 2
Third trigger: You get 1, 2, 3

所以,我存储1。 对于第二次触发,我存储2,因为1已经存在。 对于第3次触发,我存储3,因为1,2已存在

所以我总共保存了1,2,3

如您所见,我们可以轻松检查新值,如果旧的话!=新的。

问题出现了:

Fourth trigger: You get 1, 2, 4

对于第4次触发,我存储1,2,因为它存在 但如何检查3并从商店中删除3并检查4是否是新的?

如果您在理解此问题时遇到问题,请随时澄清。谢谢!

4 个答案:

答案 0 :(得分:1)

很难确切地说出你的要求,但如果您的主要问题是试图维护一组唯一数字并有效地检查集合中是否存在,请参阅std::set数据结构。

答案 1 :(得分:1)

使用std::set<int>容器。当触发器到达时,清除它并插入触发器中的所有值。如果您只使用几个数字(大约十个左右),这应该没问题。有了更多,可能需要更复杂的方法。

答案 2 :(得分:0)

您的逻辑在1,2,3和1,2,4之间变化    (前者仅储存3个,后者储存1,2,4个)

在这种情况下,忽略已经存在的数据,仅存储新数据,除非未发送某些旧数据,在这种情况下,您将创建一组要存储的新数据。

但是,我猜这根本不是你想到的:)

修改
我看到它现在已被编辑,所以我的答案无效

修改-2
最快的方法是在每次迭代时删除所有存储的数据,因为比较需要的时间长(如果不是更长),而不是完全保存已发送的数据。

答案 3 :(得分:0)

通过使用一些基本集理论,您的方法听起来更好。几个答案已经指向STL集合。有了这个,你需要遍历报告的值来测试集合中的成员资格。

但是,是否有机会影响每个“触发器”报告的内容?例如,如果这类似于选择轮询,您可以将您正在轮询的任何内容放入不同的状态,以便在后续触发器中不会将其报告为就绪。