プレーンな (ツリーベースの) STL に対するアクセスを高速化するために、名前空間のunordered_set
クラスを使用し始めました。しかし、boost() にスレッド ID への参照を格納したかったのですが、これらの識別子の API が非常に不透明であるため、そのハッシュを明確に取得できないことに気付きました。tr1
map
boost::thread::id
驚くべきことに、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 の両方で明らかな矛盾ですか?
ありがとう。