为什么关注
#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;
}
此外,解决方案是什么?我是否需要在提及here的函数对象中编写自己的hash_function
和operator==
?
答案 0 :(得分:1)
which(dat==1, arr.ind=TRUE)
# row col
# 3 3 1
# 1 1 2
# 3 3 2
不是问题,因为它已在标准库中定义。
但是,哈希函数必须根据标准库提供的operator==
std::hash
专门化进行调整,这将适用于std::u16string
容器,但不适用于Boost的容器。
一种解决方案可能是以下列方式定义散列函数:
std::unordered_*
这个包装器将为您提供一个已编写的逻辑包装,以便与Boost完美配合。
最后,让我提醒您C ++ 11标准库中等效std::size_t hash_value(std::u16string const &s) {
return std::hash<std::u16string>{}(s);
}
容器的可用性,以防您不知道。