我要做的是构建一个包含唯一元素的堆栈。
如果一个元素被推入已经在堆栈中的元素,则元素不会被推动但是现有的elemetn应该被移动到堆栈的顶部,即 ABCD + B> ACDB
我想在此向您提供哪个容器将是拥有此功能的最佳选择。
我决定在列表中使用堆栈适配器,因为
我选择的缺点是我必须手动检查重复的元素。
P.S。我的编译器不是那么近,所以请不要建议unordered_set。
答案 0 :(得分:5)
基本上你必须在恒定时间移动+长搜索或恒定时间搜索+长时间移动之间进行选择。
很难说哪个更耗时,但请考虑一下:
我建议您将元素及其堆栈位置存储在不同的容器中。以提供快速移动的方式提供快速搜索,存储堆栈位置的方式存储元素。用指针连接两者(这样你就可以知道哪个元素位于哪个位置,哪个位置包含哪个元素< - 凌乱的短语,我知道!),你会很快地执行这些操作。
答案 1 :(得分:1)
根据您的要求,在我看来,您想要的结构可以来自Max Heap。
如果不是只存储项目,而是存储一对(生成,项目),来自单调递增计数器的生成,那么堆的“根”始终是最后看到的元素(而其他元素也是如此)不是很重要,是吗?)。
delete-max
操作)increase-key
操作)insert
操作)考虑到元素的数量(20),在vector
上构建堆似乎是一个自然的选择。