使用pthread_t作为映射中的键

Using pthread_t as a key in map

本文关键字:映射 pthread 使用      更新时间:2023-10-16

我想在映射中存储一个自己的类,键的类型为pthread_t。(我类的每个对象都包含一个pthread_t数据成员,所以我希望每个实例在映射中作为键与该pthread_t关联)问题是pthread_t无法进行比较,只能与pthread_equal进行比较,所以我不能将其作为键放在映射中。

我已经看到了unordered_map,但是如何实现pthread_t的哈希函数呢?

到目前为止,我一直在考虑使用pthread_self()来比较它们,但这也是不可能的,因为返回的值是pthread_t,而且我不想使用这只是无符号长整型的typedef这一事实。

如果无法使用某种映射,我如何将pthread_t的对象存储在容器中,并使用pthread_self()函数快速找到它们?

这样它应该工作:

bool myCmp(const pthread_t &a, const pthread_t &b)
{
  return memcmp(&a, &b, sizeof(pthread_t)) < 0;
}
map<pthread_t, myDataType, myCmp> myMap;