![]() |
1
8
架线的开销
如果你
绝对地
必须使用无序容器,
尝试使用
请勿尝试以下操作
它可以工作,但极为脆弱,几乎是一颗定时炸弹。它假定对系统的内部工作有深入的了解
|
![]() |
2
3
显而易见的问题是,为什么要实际使用哈希?
正如KeithB所建议的(我不会评论使用二进制表示法,因为没有任何东西可以保证2个ID具有相同的二进制表示法……),使用排序的
排序向量/数据块对缓存友好得多,但是它们会受到 O(N) 由于涉及复制,因此插入/擦除的复杂性。一旦你达到几百个线程(顺便说一句,从来没有见过这么多),它可能会受伤。 然而,有一种数据结构试图将地图和排序向量的好处联系起来: B+Tree . 您可以将其视为每个节点将包含多个元素(按排序顺序)的映射。仅使用叶节点。 要获得更高的性能,您可以:
渐近性能与映射相同,因为它实现为一个平衡的二叉树,但由于值是分组的,所以代码的速度可以加快一个常数。
|
![]() |
3
2
为什么要将这些存储在一组中。除非你做了一些不同寻常的事情,否则会有少量的线程。维护一个集合的开销可能比仅仅将它们放在向量中并进行线性搜索要高。
如果搜索比添加和删除更频繁,则可以使用排序向量。有一个<为boost::thread::id定义的运算符,因此您可以在每次添加或删除后对向量进行排序(或插入到正确的位置),并使用
如果您仍然需要这样做,那么将其视为sizeof(boost::thread:id)字节并对其进行操作如何。
编辑:我看了一下
|
![]() |
4
2
回答这个问题已经晚了几年,但在试图将boost::thread::id作为键放入std::unordered_映射时,这是最相关的问题。在接受的回复中,获取本机句柄是一个很好的建议,只是它不适用于此线程。 相反,boost for time为thread::id提供了一个hash_值,所以这对我来说很好:
当然,需要链接libboost_线程库。 |
![]() |
5
0
|
![]() |
Jahongir Rahmonov · 计算文件的校验和 7 年前 |
![]() |
Lev Knoblock · 类哈希函数 7 年前 |
![]() |
Sazzad Hissain Khan · 算法-在二维矩阵中搜索 7 年前 |
![]() |
Asur · 如何在PHP中同时使用多种算法对文件进行哈希? 7 年前 |
![]() |
OofYeetMcGee · 实现PBKDF2 7 年前 |
![]() |
yibs · 如何在Perl中计算csv中具有相同id的项目数 7 年前 |