Example of how to use bm::str_sparse_vector<> - succinct container for bit-transposed string collections
#include <iostream>
#include <string>
#include <vector>
#include <random>
#include <algorithm>
#include <fstream>
using namespace std;
static
{
const unsigned max_coll = 50000;
str_vec.resize(0);
string str;
for (unsigned i = 10; i < max_coll; i += rand() % 3)
{
str = to_string(i);
str_vec.emplace_back(str);
}
std::random_device rd;
std::mt19937 g(rd());
std::shuffle(str_vec.begin(), str_vec.end(), g);
}
{
try
{
vector<string> str_vec;
std::sort(str_vec.begin(), str_vec.end());
{
size_t vect_size = 0;
{
for (auto str : str_vec)
{
bi = str;
size_t str_size = str.size() + sizeof(str);
vect_size += str_size;
}
cout << "STL vector<string> approx.memory consumption:"
<< vect_size << endl;
}
cout <<
"Used memory: " << st.
memory_used << std::endl;
cout << "Used memory after remap and optimization: "
<< std::endl;
{
for (auto str : str_vec)
bi = str;
bool eq = str_sv1.
equal(str_sv);
assert(eq);
cout << "Used memory after remap / optimization / freeze: "
<< std::endl;
{
{
unsigned cnt = 0;
str_sv2.get_back_inserter();
for (auto str : str_vec)
{
bi = str;
if (++cnt >= 10)
break;
}
}
str_sv2.optimize();
cout << "size2=" << str_sv2.size() << endl;
}
}
}
{
std::string fname = "test.sv";
std::ofstream fout(fname.c_str(), std::ios::binary);
if (!fout.good())
{
return -1;
}
const char* buf = (
char*)sv_lay.
buf();
fout.write(buf, (
unsigned)sv_lay.
size());
if (!fout.good())
{
return -1;
}
fout.close();
cout <<
"Saved size: " << sv_lay.
size() << endl;
}
}
catch(std::exception& ex)
{
std::cerr << ex.what() << std::endl;
return 1;
}
return 0;
}
Compressed bit-vector bvector<> container, set algebraic methods, traversal iterators.
#define BM_DECLARE_TEMP_BLOCK(x)
Serialization for sparse_vector<>
string sparse vector based on bit-transposed matrix
pre-processor un-defines to avoid global space pollution (internal)
Bitvector Bit-vector container with runtime compression of bits.
Back insert iterator implements buffered insert, faster than generic access assignment.
void flush()
flush the accumulated buffer.
void set_remap(bool flag) BMNOEXCEPT
Method to configure back inserter to collect statistics on optimal character codes.
succinct sparse vector for strings with compression using bit-slicing ( transposition) method
bool is_ro() const BMNOEXCEPT
Returns true if vector is read-only.
void optimize(bm::word_t *temp_block=0, typename bvector_type::optmode opt_mode=bvector_type::opt_compress, typename str_sparse_vector< CharType, BV, STR_SIZE >::statistics *stat=0)
run memory optimization for all vector planes
void calc_stat(struct str_sparse_vector< CharType, BV, STR_SIZE >::statistics *st) const BMNOEXCEPT
Calculates memory statistics.
bool equal(const str_sparse_vector< CharType, BV, STR_SIZE > &sv, bm::null_support null_able=bm::use_null) const BMNOEXCEPT
check if another sparse vector has the same content and size
void remap_from(const str_sparse_vector &str_sv, octet_freq_matrix_type *omatrix=0)
Build remapping profile and load content from another sparse vector Remapped vector likely saves memo...
void freeze()
Turn sparse vector into immutable mode Read-only (immutable) vector uses less memory and allows faste...
back_insert_iterator get_back_inserter()
Provide back insert iterator Back insert iterator implements buffered insertion, which is faster,...
void sparse_vector_serialize(const SV &sv, sparse_vector_serial_layout< SV > &sv_layout, bm::word_t *temp_block=0)
Serialize sparse vector into a memory buffer(s) structure.
@ COPY_RTABLES
copy remap tables only (without data)
bm::str_sparse_vector< char, bvector_type, 32 > str_sv_type
static void generate_string_set(vector< string > &str_vec)
size_t memory_used
memory usage for all blocks and service tables
layout class for serialization buffer structure
size_t size() const BMNOEXCEPT
return current serialized size
const unsigned char * buf() const BMNOEXCEPT
Return serialization buffer pointer.