C++ std::位集上的位扫描(bsf)?或类似

C++ std::位集上的位扫描(bsf)?或类似,c++,bitset,C++,Bitset,我正在做一个项目,涉及解决一些NP难的图形问题。特别是贝叶斯网络的三角剖分 无论如何,我正在使用std::bitset创建一个邻接矩阵,这非常好。。。但我想使用bsf指令扫描位集。例如,不使用while循环 有人知道这是否可行吗?先使用它,然后使用BSF(对于大于32位的内容,您需要自定义contian,或者通过某种方式获取对每个32/64位集的引用) 对于MSVC上的BSF,您可以使用其他您可以使用的内容 您可能还想看看使用GCC4.0.0附带的STL,而位集方法\u Find\u first

我正在做一个项目,涉及解决一些NP难的图形问题。特别是贝叶斯网络的三角剖分

无论如何,我正在使用std::bitset创建一个邻接矩阵,这非常好。。。但我想使用bsf指令扫描位集。例如,不使用while循环

有人知道这是否可行吗?

先使用它,然后使用BSF(对于大于32位的内容,您需要自定义contian,或者通过某种方式获取对每个32/64位集的引用)

对于MSVC上的BSF,您可以使用其他您可以使用的内容


您可能还想看看使用GCC4.0.0附带的STL,而位集方法
\u Find\u first
\u Find\u next
已经完成了您想要的功能。具体来说,它们使用
\u builtin\u ctzl()
(已描述),应该使用适当的指令。(我想这同样适用于gcc的旧版本。)


好的是,位集已经做了正确的事情:如果它是一个位集,它适合于一个无符号长;如果它使用多个循环,它是一个循环,它的长度在编译时是已知的,有一些指令,因此它可能会被优化器完全展开。也就是说,它会可能很难通过自己的方式来打败比特集。

< P>也许你可以考虑看C++库来进行位数组操作和管理位编码的无向图。因为这是我的代码,我不会在这个问题上添加额外的注释。
希望有帮助!(如果有,我会对任何反馈感兴趣)。

我看过BitMagic,但它是动态尺寸,我可以通过静态尺寸获得更高的速度…和to_ulong()定义为如果位集大于无符号长,则引发异常,因此不会这样做…32位位集的向量会有帮助吗?在我看来,最好的选择是滚动您自己的类,然后您可以将bsf集成到该类中。std::bitset可以用作基,因为它的源在headerOkay中给出,我认为这是最好的制作一个包装std:bitset方法的结构,以便使用#ifdefs为其他编译器/系统实现缺失的功能…-谢谢…您好,作为内置函数意味着什么?为什么它没有正式文档化并可公开访问?这里指的是gcc编译器提供的函数有趣的是,我在几年前完成了这个项目,但最终得到了一个完全基于标题的实现,请参见:(或完整的源代码)