我有一些名为“tokens”的元素。它们每一个都是某种关联容器(不一定是std容器)。我有一种存储器类型叫做“storage”,它存储tokens(不一定是std容器)。"storages"是"tokens"的集合。
我需要能够按指定键和指定比较器对令牌("storage")集合执行交集操作的能力。 作为该操作的结果,我希望得到另一个令牌集合(另一个"storage")。
我需要能够按指定键和指定比较器对令牌("storage")集合执行交集操作的能力。 作为该操作的结果,我希望得到另一个令牌集合(另一个"storage")。
伪代码中的用例:
if ( (storage0[key1]==storage1[key1])[key2]<storage1[key2] )
...
我正在寻找一种高效的算法来完成这个任务。
注意:我有几十个令牌。
问题:
1)如何组织存储?
2)如何实现交集操作?
更新一些解释:
令牌是一组(键,值)对。
存储是一组(键,值)对的集合
我需要intersect(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])的那些元素((键,值)对)
==
时,会认为它是一个返回true
或false
的二元运算符。你是在进行一些返回布尔值集合的集合比较吗?还是在进行 lambda 演算?另外,首先storage[key]
是什么?我以为storage
只是一个集合,而不是某种 (key,set) 映射。key
是用于存储和令牌元素的相同类型的键吗?它们之间有什么关系? - CygnusX1