gpt4 book ai didi

c++ - 没有散​​列的无序映射

转载 作者:行者123 更新时间:2023-11-28 07:14:22 26 4
gpt4 key购买 nike

我想使用类似于 std::map 的结构,但没有排序,我不需要排序,而且我的 key 非常大,所以“小于”比较需要时间。所以,我看到了 unordered_map 但它有一个散列模板参数,那么,如何在没有散列的情况下使用 unordered_map 呢?我真的需要构建自己的容器吗?

这个问题也适用于 std::set。

编辑一些答案建议创建我自己的哈希,但我不能这样做,我应该在这里指定它。 key 包含 float 据,因此对其进行散列将是一个非常糟糕的主意。我需要直接比较 (std::equal_to)。

最佳答案

创建您自己的哈希,通过组合 std::hash 的重载很容易完成在您的 key 字段上。

cppreference example (与之前的链接相同)非常好(即使您不需要模板内容):

struct S
{
std::string first_name;
std::string last_name;
};

template <class T>
class MyHash;

template<>
class MyHash<S>
{
public:
std::size_t operator()(S const& s) const
{
std::size_t h1 = std::hash<std::string>()(s.first_name);
std::size_t h2 = std::hash<std::string>()(s.last_name);
return h1 ^ (h2 << 1);
}
};

之后你可以在std::unorderd_map中使用它:

std::unordered_map<S, Value, MyHash<S>> the_map;

顺便说一句std::unordered_set还需要一个散列。

关于c++ - 没有散​​列的无序映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20457994/

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