gpt4 book ai didi

boost - 如何使用一组boost::dynamic_bitset?

转载 作者:行者123 更新时间:2023-12-02 22:18:41 25 4
gpt4 key购买 nike

我正在尝试使用 setdynamic_bitset对象,但我在运行时遇到断言失败:

a.out: boost/dynamic_bitset/dynamic_bitset.hpp:1291: 
bool boost::operator<(const boost::dynamic_bitset<Block, Allocator>&,
const boost::dynamic_bitset<Block, Allocator>&)
[with Block = long unsigned int,
Allocator = std::allocator<long unsigned int>]:
Assertion `a.size() == b.size()' failed.

代码如下:

#include <iostream>
#include <set>
#include <boost/dynamic_bitset.hpp>

int main() {
typedef boost::dynamic_bitset<> bitset;
std::set<bitset> myset;
bitset x(2, 0);
bitset y(3, 1);
myset.insert(x);
myset.insert(y);
return 0;
}

我想知道为什么插入的 dynamic_bitset 大小相同对象是必需的。对于 operator<为了工作,它不能假设较短的位集中的最高有效位隐式地用零填充吗?

有什么办法可以得到那组 dynamic_bitset要上类吗?

我也试过 unordered_set因为它不需要 operator<但它无法编译,因为 dynamic_bitset没有 hash_value而且我不确定如何在不使用其 to_ulong 的情况下编写它成员函数,仅适用于短位集。

最佳答案

断言的原因是operator<的方式已实现:

for (size_type ii = a.num_blocks(); ii > 0; --ii)

只有第一个操作数的 block 计数用于迭代位集。如果第一个 bitset 的大小较大,它将越界访问第二个 bitset。

您可以通过 std::set 定义和使用您自己的比较器,并根据您的需要处理不同大小的位集的比较:

struct my_less {
bool operator()(const boost::dynamic_bitset<>& lhs,
const boost::dynamic_bitset<>& rhs) const
{
//TODO: implement custom comparison for lhs < rhs
return false;
}
};
typedef boost::dynamic_bitset<> bitset;
std::set<bitset,my_less> myset;

myset.insert( bitset(2, 0) );
myset.insert( bitset(3, 1) );

关于boost - 如何使用一组boost::dynamic_bitset?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14074293/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com