【发布时间】:2023-03-23 00:52:01
【问题描述】:
我的问题:我想使用std::stack<std::pair<int,int>, std::unordered_set<std::pair<int,int>>
或简称std::stack<coords, std::unordered_set<coords>>
我想知道是否可以扩展std::unordered_set<> 使其在std::stack<> 内部正常运行而不会出现问题。
除此之外,我想知道它是否值得付出努力,而不透露实际的最终用途。我的意思是为了使用 unordered_set 的好处,使用必要的方法设计我自己的模板会比扩展现有的 unordered_set 来满足要求更有效吗?
编辑:通常我会删除一个否定的问题,但我觉得这可能最终对其他误解 std::unordered_set 的可怜人有所帮助。再说一次,我还没有死,所以我很可能会删除它。
编辑 2:下面 AndreyT 的回答有助于弄清楚为什么 std::stack<std::pair<int,int>, std::unordered_set<std::pair<int,int>> 不能成为一件事。我切换到 jxh 的答案,因为它基本上实现了一个并且接近我最终使用的。
【问题讨论】:
-
我认为应该是 unordered_set
而不是 unordered_set<:pair>> -
您希望它如何工作?
std::stack是一个按插入时间排序的容器。std::unordered_set是一个由散列函数排序的容器。您能否描述一下您真正想要实现的目标(在性能或示例方面)? -
不,
unordered_set中的元素不会保持有序。该顺序纯粹是任意的,并且可以在任何触发重新散列的插入时更改,例如如果桶数为 10,元素 A 的哈希码为 45,元素 B 的哈希码为 675,那么它们都将在同一个桶中(45%10 == 675%10),但如果桶数变为 11,它们将被移动到不同的桶 (45%11 != 675%11) -
unordered_xxx容器的全部意义在于 O(1) 查找容器中任意位置的任意成员和 O(1) 插入容器中的任意位置。std::stack的全部意义在于您只能在一端访问它。您的问题就像问您是否可以将架子改装为传送带。如果你足够努力,也许你可以,但这没有意义。 -
我还以为你是因为模仿“Love Shack”而换了 :)
标签: c++ c++11 stl stack unordered-set