gpt4 book ai didi

C++ std::map 或 std::set - 有效地插入重复项

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:04:20 26 4
gpt4 key购买 nike

我有一堆充满重复的数据,我想消除重复项。你知道,例如[1, 1, 3, 5, 5, 5, 7] 变为 [1, 3, 5, 7]。

看起来我可以使用 std::map 或 std::set 来处理这个问题。但是,我不确定 (a) 将所有值简单地插入容器中是否更快,或者 (b) 检查它们是否已经存在于容器中并且仅在不存在时才插入 - 插入是否非常有效?即使有更好的方法...您能建议一种快速的方法吗?

另一个问题 - 如果我存储在其中的数据不像整数那样微不足道,而是一个自定义类,那么 std::map 如何设法正确存储(散列?)数据以便快速访问通过 operator[]?

最佳答案

std::map不使用散列。 std::unordered_map确实如此,但那是 C++11。 std::mapstd::set两者都使用您提供的比较器。类模板具有此比较器的默认值,归结为 operator<比较,但您可以提供自己的。

如果您不需要同时存储键和值(看起来您不需要),您应该只使用 std::set ,因为这样更合适。

标准没有说明什么数据结构map s 和 set在引擎盖下使用,只是某些 Action 具有一定的时间复杂性。实际上,我所知道的大多数实现都使用树。

如果您使用 operator[],在时间复杂度方面没有区别或 insert , 但我会使用 insertoperator[]在我做 search 之前接着是 insert如果找不到该项目。后者将意味着两次单独的搜索以将项目插入到集合中。

关于C++ std::map 或 std::set - 有效地插入重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12826364/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com