I want to use a cache, implemented by boost's unordered_map, from a dynamic_bitset to a dynamic_bitset. The problem, of course, is that there is no default hash function from the bitset. It doesn't seem to be like a conceptual problem, but I don't know how to work out the technicalities. How should I do that?
我正在寻找Java Bitset实现的替代方案.我正在实现一个高性能算法,似乎使用Bitset对象正在扼杀它的性能.有任何想法吗?
我试图在C++中创建一个位集矢量.为此,我尝试了下面的代码片段中显示的尝试:
vector<bitset<8>> bvc;
while (true) {
bitset<8> bstemp( (long) xtemp );
if (bstemp.count == y1) {
bvc.push_back(bstemp);
}
if ( xtemp == 0) {
break;
}
xtemp = (xtemp-1) & ntemp;
}
Run Code Online (Sandbox Code Playgroud)
当我尝试编译程序时,我得到的错误是读取bvc未在范围中声明的内容.它进一步告诉模板参数1和2无效.(第1行).另外,在包含的行中bvc.push_back(bstemp),我收到的错误是读取成员函数的无效使用.
使用JPA,我希望能够将BitSet保存到数据库并将其拉回到程序中.
假设我有:
@Entity
@Table(name = "myTable")
public class MyClass {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "Object_Id")
protected long id;
@Column(name = "Tags")
protected BitSet tags;
... getters & setters etc...
}
Run Code Online (Sandbox Code Playgroud)
还应该定义"columnDefinition"吗?我真的不明白它是如何持久的(使用toString()?)而且它是如何从数据库中加载回来的.
你能帮帮我一下吗?
谢谢!
我在一个看起来像的文件中有一个二进制字符串
0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001100100101101100110000110100110110111000010100110110110110111000011001000010110010010001100010010001010010010100001011001100010100001100100011011101
(256位).我可以将此字符串设置为bitset<256>非常快的值吗?
目前我在做
for (int t = sizeof(c) - 1; t > 0; t--) {
if (c[t] == '1') {
b |= 1;
}
b <<= 1;
}
b >>= 1;
Run Code Online (Sandbox Code Playgroud)
但我的结果不正确.
对于SO来说这只是一点点OT,因为我不是要解决一个特定的问题,而只是为了理解某些事情的实现方式.但我是在代码之后,让我们看看它是怎么回事......
假设我们在一周中的每一天都有一个复选框,我们决定将这些复选框的任意组合存储为单个数字,这样:
0 = no days
1 = Monday
2 = Tuesday
4 = Wednesday
8 = Thursday
16 = Friday
32 = Saturday
64 = Sunday
127 = everyday
Run Code Online (Sandbox Code Playgroud)
如何在PHP中实现该逻辑,以便如果我提交说"13",PHP会知道只勾选周一,周三和周四复选框?
我正在寻找一种高效的方法来生成std::bitset设定长度的随机性.我也希望能够影响1s出现在结果中的概率,所以如果概率值设置得足够低,所有结果中只有一小部分甚至会包含a 1,但它仍然可能(但不太可能) )导致所有1s.它将用于计算量很大的应用程序中,因此欢迎所有可能的优化.
我在相当高吞吐量的设置中使用Scala Enumeration ValueSet - 创建,测试,联合和交叉约10M /秒/核心.我没想到这会是一个大问题,因为我曾经读过他们得到BitSets支持的地方,但令人惊讶的是,ValueSet.isEmpty在与YourKit的分析会话中出现了热点.
为了验证,我决定尝试使用Java BitSet重新实现我需要的东西,同时尝试保留使用Scala Enumerations的一些类型安全性.(代码审查转移到https://codereview.stackexchange.com/questions/74795/scala-bitset-implemented-with-java-bitset-for-use-in-scala-enumerations-to-repl)好消息是,将我的ValueSets更改为这些BitSet确实减少了25%的运行时间,因此我不知道ValueSet在引擎盖下的确做了什么,但它可以改进......
编辑:查看ValueSet源似乎表明isEmpty肯定是O(N),使用通用SetLike.isEmpty实现. 考虑到ValueSet是用BitSet实现的,这是一个错误吗?
编辑:这是分析器的回溯.这似乎是一种在bitset上实现isEmpty的疯狂方法.

下面的函数需要两个BitSets,复制第一个(它不能被覆盖),将副本与第二个(按位AND)相交并返回结果的基数.
public int getIntersectionSize(BitSet bits1, BitSet bits2) {
BitSet copy = (BitSet) bits1.clone();
copy.and(bits2);
return copy.cardinality();
}
Run Code Online (Sandbox Code Playgroud)
我对这段代码加速感兴趣吗?这个功能被称为十亿次,所以即使是微秒加速也是有道理的,而且我对最快的代码感到好奇.
bitset ×10
c++ ×5
java ×4
vector ×2
arrays ×1
boost ×1
cardinality ×1
char ×1
enumeration ×1
file ×1
hash ×1
intersection ×1
jpa ×1
math ×1
optimization ×1
persistence ×1
php ×1
random ×1
scala ×1
stl ×1