2012-12-28 8 views
1

가 나는 setdynamic_bitset의 개체를 사용하려고 해요,하지만 난 런타임에 어설 션 오류를 받고 있어요 :boost :: dynamic_bitsets를 어떻게 사용합니까?

#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; 
} 

내가 왜 궁금 해요 : 여기

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. 

하면 코드 삽입 된 dynamic_bitset 개체와 동일한 크기가 필요합니다. operator<이 작동하려면 짧은 비트 셋의 최상위 비트가 암시 적으로 0으로 채워져 있다고 가정 할 수 없습니까?

dynamic_bitset이 작동하려면 어떤 방법이 있습니까? , 그것은 operator<을 필요로하지 않기 때문에

나는 또한 unordered_set을 시도했지만 dynamic_bitsethash_value이 없기 때문에 그것은 컴파일 할 수 없습니다와 나는 그것의 to_ulong 멤버 함수를 사용하지 않고 그것을 작성하는 방법을 잘 모르겠어요 짧은 비트셋에서만 작동합니다.

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

첫 번째 피연산자 블록 카운트가 bitsets 통해 반복 사용된다

답변

4

주장하는 이유는 operator< 구현되는 방법이다. 첫 번째 비트 세트의 크기가 더 크면 경계 밖의 두 번째 비트 세트에 액세스합니다.

정의하고 표준 : 설정하여 자신의 comperator을 사용하고 당신이 맞는 볼 다른 크기의 bitsets의 비교를 처리 할 수 ​​

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));