我开始使用命名空间中的unordered_set
类tr1
来加速对普通(基于树的) STL 的访问map
。但是,我想在 boost( boost::thread::id
) 中存储对线程 ID 的引用,并意识到这些标识符的 API 是如此不透明,以至于您无法清楚地获得它的哈希值。
令人惊讶的是,boost 实现了部分tr1
(包括hash
和unordered_set
),但它没有定义能够散列线程 ID 的散列类。
查看文档,boost::thread::id
我发现线程 ID 可以输出到流中,所以我的哈希解决方案是这样的:
struct boost_thread_id_hash
{
size_t operator()(boost::thread::id const& id) const
{
std::stringstream ostr;
ostr << id;
std::tr1::hash<std::string> h;
return h(ostr.str());
}
};
也就是说,对其进行序列化,将哈希应用于结果字符串。但是,这似乎比实际使用 STL 效率低map<boost::thread::id>
。
所以,我的问题是:你找到更好的方法了吗?不强制一个hash<boost::thread::id>
类的存在是否在 boost 和 tr1 中都存在明显的不一致?
谢谢。