【发布时间】:2014-05-30 06:30:37
【问题描述】:
我正在尝试实现值对的存储。它必须公开一个简单的 API:newPair, get, remove, isMember。一个值可以由4-bit int 或指向另一对的指针组成。所以,例如:
Pointer a = API.newPair(13,12);
Pointer b = API.newPair(a,7);
Pointer c = API.newPair(2,b);
Pointer d = API.newPair(a,7);
等等。但是,只有一个警告:绝对不能将一对存储两次。如果您尝试添加一个已经存在的对,它只会返回现有的指针。因此,例如,在上面的代码中,b == d。
我的幼稚实现涉及一堆对。每次添加一个新对时,我只是迭代堆栈,如果我在那里找到这对,我返回它的位置。如果没有,我在堆栈中添加了一个新元素并返回堆栈大小。现在我需要让它尽可能快。我目前的想法是只使用哈希表而不是堆栈。
那么,问题是:什么是实现这一点的快速方法?
【问题讨论】:
-
可能是一个哈希表,例如
std::unoedered_set<YourPairType>。你只需要实现一个哈希函数和一个相等比较。
标签: c++ algorithm math data-structures hash