Jam*_*son 3 c++ bit-manipulation similarity bit
我正在基于二元存在或不存在一组特征来执行对象的比较.这些功能可以用位字符串表示,例如:
10011
Run Code Online (Sandbox Code Playgroud)
该位串具有第一,第四和第五特征.
我正在尝试计算一对位串的相似性,作为两者共有的特征数量.对于给定的一组位串,我知道它们都具有相同的长度,但我不知道在编译时该长度是多少.
例如,这两个字符串有两个共同的特征,所以我希望相似函数返回2:
s(10011,10010) = 2
Run Code Online (Sandbox Code Playgroud)
如何有效地表示和比较C++中的位串?
Cha*_*esB 10
您可以使用std::bitsetSTL类.
它们可以用位串构建,ANDed,并计数1:
#include <string>
#include <bitset>
int main()
{
std::bitset<5> option1(std::string("10011")), option2(std::string("10010"));
std::bitset<5> and_bit = option1 & option2; //bitset will have 1s only on common options
size_t s = and_bit.count (); //return the number of 1 in the bitfield
return 0;
}
Run Code Online (Sandbox Code Playgroud)
编辑
如果在编译时未知位数,则可以使用boost::dynamic_bitset<>:
boost::dynamic_bitset<> option(bit_string);
Run Code Online (Sandbox Code Playgroud)
示例的其他部分不会更改,因为boost::dynamic_bitset<>共享一个公共接口std::bitset.