char :: unordered_set char16_t字符串

时间:2015-10-03 08:45:52

标签: c++ c++11 boost boost-unordered

为什么关注

#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_functionoperator==

1 个答案:

答案 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); } 容器的可用性,以防您不知道。