【发布时间】:2012-02-17 17:22:42
【问题描述】:
我得到了称为 tokens 的元素。它们中的每一个都是某种关联容器(不一定是 std 容器之一)。我得到了某种类型的容器 storage 来存储令牌(不一定是 std 容器之一)。存储是一组 令牌。
我需要能够通过具有指定比较器的指定键对 token 值上的令牌集(storage)执行交集操作。
作为该操作的结果,我想获得另一组令牌(另一个 storage)。
伪代码用例:
if ( (storage0[key1]==storage1[key1])[key2]<storage1[key2] )
...
我正在寻找一种有效的算法来做到这一点。
注意:我得到了几十个令牌。
问题:
1)如何组织存储?
2)如何实现路口操作?
更新一些解释:
token 是一组(键,值)对。
storage 是一组 (key,value) 对的集合
我需要相交(P1,K1,P2,K2,cmp)
P1 - 第一个存储
P2 - 第二存储
K1 - 第一次存储的密钥
K2 - 第二个存储的密钥
cmp - 比较函数,如 cmp(value,value),返回 true 或 false
Intersect 应该经过 P1 的每个元素 e1,并且经过 P2 的每个元素 e2 并提取满足 cmp(e1[K1],e2[K2]) 的那些元素((键,值)对)
【问题讨论】:
-
看了几遍还是理解有问题:(是不是这样:token是一组(key,value)对。存储是一组(key,value)对. 你需要
intersect(P,q,cmp), 其中P-storage, q-token, cmp - 两个(key,value) 对之间的比较函数。Intersect 应该遍历P的每个元素e,并提取那些(key,value ) 对满足cmp与q的任何元素? -
这段代码:if ( (storage0[key1]==storage1[key1])[key2]
-
@fjardon if (((storage0[key1]==storage1[key1])[key2]
-
(storage0[key1]==storage1[key1]) 是一个布尔值。那么 (storage0[key1]==storage1[key1])[key2] 是什么?
-
大多数看到
==的人认为它是一个返回true或false的二元运算符。您是否正在做一些返回一组布尔值的集合范围比较?还是 lambda 演算?另外,首先storage[key]是什么?我认为storage只是一个集合,而不是一些 (key,set) 映射。用于存储的key和相同类型的令牌元素的键是否相同?它们有什么关系?