一个堆栈,可以取舍关键值重复,或关键值不重复。求解决思路

一个堆栈,可以选择关键值重复,或关键值不重复。求解决思路
昨天的贴,问题定位错误。重新发贴切。

需要一个速度很快的堆栈,可以选择关键值重复或不重复。

各位大侠给个思路。有C++代码更好啦。

------解决方案--------------------
重复的话,一般的栈就可以了
不重复的话,unsorthash?
------解决方案--------------------
mark一下,我也想看看有什么好的解决方案
------解决方案--------------------
这个需求很怪。要快速查找只能再加一个辅助容器。
------解决方案--------------------
既然要求后进先出, 所有存储后无法标记顺序的容器 SET MAP RBTree都被排除了.
传统STACK不提供迭代器,无法判断是否已压栈数据.
最简单的 使用list 或vector, 入栈 出栈仅使用push_back, pop_back,为满足LZ需求可对push_back做一层封装,使用算法find(begin, end, value) 来判断是否已存储数据.
list不用说,插入删除操作效率很高,vector因为只在尾端插入删除,同样拥有最高的效率.
算法时间空间复杂度O(n).
你这要求要访问已压栈数据,又要符合后进先出. 即同时要求提供随机访问迭代器的容器,容器本身又要有序.查询效率就很难保证. 这是我想到的最简单有效的方法. 
------解决方案--------------------
快速的栈一般固定大小,在编译时或创建时确定,一般不大,所以线性扫描就行。 
如果不是这种情况,就该考虑换别的数据结构了。 
------解决方案--------------------
加一个辅助的map呗 

允许重复的时候不检查map
不允许重复的时候检查map,存在则不push
------解决方案--------------------
引用:
昨天的贴,问题定位错误。重新发贴切。

需要一个速度很快的堆栈,可以选择关键值重复或不重复。

各位大侠给个思路。有C++代码更好啦。
              
                  栈


请澄清一个歧义的地方,这个重复不重复的选择,是定义时选择其中一种后,运行期内就不再变化,还是在运行期内,这个堆栈的重复与不重复需求会动态变化?
------解决方案--------------------
UINT b[] = {0x00000001, 0x00000002..., 0x80000000}
class v
{
public:
    v() {memset(a, 0, sizeof(UINT )*96);}
    bool push(UINT u);
    bool top();
private:
    Stack m_Stack;
    UINT  a[94]
}
bool v::push(UINT u) {
    if (a[u/32]&b[u%32])
        return false;
    a[u/32]
------解决方案--------------------
=b[u%32];
    m_Stack.push(u);
    return true;
}
bool v::top() {
    if (!m_Stack.empty())
    {
        a[m_Stack.top()/32]&=b[m_Stack.top()%32];
        m_Stack.pop();
        return true;
    }
    return false;
}

這樣行嗎?
------解决方案--------------------
晕死啊,现在才发现偶把value_type写成了size_type了,请改过来。
------解决方案--------------------
建议用两个表,一个表示入栈索引,用作栈空间