gpt4 book ai didi

c++ - boost::unordered_set of char16_t 字符串

转载 作者:行者123 更新时间:2023-11-30 05:38:08 25 4
gpt4 key购买 nike

为什么要关注

#include <string>
#include <boost/unordered_set.hpp>

int main()
{
typedef boost::unordered_set<std::string> unordered_set;
unordered_set animals;

animals.emplace("cat");
animals.emplace("shark");
animals.emplace("spider");
return 0;
}

工作和后续导致太多编译错误。

#include <string>
#include <boost/unordered_set.hpp>

int main()
{
typedef boost::unordered_set<std::u16string> unordered_set;
unordered_set animals;

animals.emplace("cat");
animals.emplace("shark");
animals.emplace("spider");
return 0;
}

还有,解决这个问题的方法是什么?我是否需要在函数对象中编写自己的 hash_functionoperator==,如 here 所述?

最佳答案

operator== 不是问题,因为它已经在标准库中定义。但是,散列函数必须从标准库提供的 std::u16stringstd::hash 特化改编而来,它将适用于 std::unordered_* 容器,但不是 Boost 的容器。

一种解决方案可能是以下列方式定义散列函数:

std::size_t hash_value(std::u16string const &s) {
return std::hash<std::u16string>{}(s);
}

这个包装器将为您提供一个已经编写好的逻辑,可以很好地与 Boost 一起工作。

最后,让我提醒您 C++11 标准库中等效的 std::unordered_set 容器的可用性,以防您不知道。

关于c++ - boost::unordered_set of char16_t 字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32920613/

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