BitMagic-C++
svsample07.cpp

Example of how to use bm::str_sparse_vector<> - succinct container for sorted bit-transposed collection of integers

See also
bm::sparse_vector
bm::sparse_vector_scanner<>::lower_bound
/*
Copyright(c) 2002-2019 Anatoliy Kuznetsov(anatoliy_kuznetsov at yahoo.com)
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
For more information please visit: http://bitmagic.io
*/
/** \example svsample07.cpp
Example of how to use bm::str_sparse_vector<> - succinct container for
sorted bit-transposed collection of integers
\sa bm::sparse_vector
\sa bm::sparse_vector_scanner<>::lower_bound
*/
/*! \file svsample07.cpp
\brief Example: sparse_vector<> lower bound search
*/
#include <iostream>
#include <vector>
#include <chrono>
#include <algorithm>
#include <random>
#include <algorithm>
#include <stdexcept>
#include "bm.h"
#include "bmsparsevec.h"
using namespace std;
// generate collection of strings from integers and shuffle it
//
static
void generate_set(vector<unsigned>& vec)
{
const unsigned max_coll = 50000;
vec.resize(0);
for (unsigned i = 10; i < max_coll; i += rand() % 3)
{
vec.emplace_back(i);
} // for i
// shuffle the data set
//
std::random_device rd;
std::mt19937 g(rd());
std::shuffle(vec.begin(), vec.end(), g);
}
// insertion sort takes data from unsorted vector places it into sparse vector
// maintaining correct sorted order (for fast search)
//
static
void insertion_sort(sparse_vector_u32& sv, const vector<unsigned>& vec)
{
// scanner object is re-used throught the processing
//
for (const unsigned u : vec)
{
bool found = scanner.lower_bound(sv, u, pos);
(void)found; // just to silence the unused variable warning
sv.insert(pos, u);
} // for u
}
int main(void)
{
try
{
vector<unsigned> vec;
insertion_sort(sv, vec);
sv.optimize(); // mmemory optimization after active editing
// validate the results to match STL sort
std::sort(vec.begin(), vec.end());
{
vector<unsigned>::const_iterator vit = vec.begin();
for (; it != it_end; ++it, ++vit)
{
unsigned u = *it;
if (*vit != u)
{
cerr << "Mismatch at:" << u << "!=" << *vit << endl;
return 1;
}
} // for
}
cout << "Sort validation Ok." << endl;
}
catch(std::exception& ex)
{
std::cerr << ex.what() << std::endl;
return 1;
}
return 0;
}
bmsparsevec_algo.h
Algorithms for bm::sparse_vector.
bm::sparse_vector::optimize
void optimize(bm::word_t *temp_block=0, typename bvector_type::optmode opt_mode=bvector_type::opt_compress, typename sparse_vector< Val, BV >::statistics *stat=0)
run memory optimization for all vector plains
Definition: bmsparsevec.h:1750
bm::sparse_vector< unsigned, bm::bvector<> >::const_iterator
friend const_iterator
Definition: bmsparsevec.h:348
bm::sparse_vector
sparse vector with runtime compression using bit transposition method
Definition: bmsparsevec.h:81
bmsparsevec.h
Sparse constainer sparse_vector<> for integer types using bit-transposition transform.
bm::sparse_vector_scanner
algorithms for sparse_vector scan/search
Definition: bmsparsevec_algo.h:481
bm::sparse_vector::end
const_iterator end() const BMNOEXCEPT
Provide const iterator access to the end
Definition: bmsparsevec.h:493
generate_set
static void generate_set(vector< unsigned > &vec)
Definition: svsample07.cpp:51
insertion_sort
static void insertion_sort(sparse_vector_u32 &sv, const vector< unsigned > &vec)
Definition: svsample07.cpp:72
bm::sparse_vector::begin
const_iterator begin() const BMNOEXCEPT
Provide const iterator access to container content
Definition: bmsparsevec.h:1922
sparse_vector_u32
bm::sparse_vector< bm::id_t, bm::bvector<> > sparse_vector_u32
Definition: svsample07.cpp:46
bm::sparse_vector::insert
void insert(size_type idx, value_type v)
insert specified element into container
Definition: bmsparsevec.h:1526
main
int main(void)
Definition: svsample07.cpp:90
bm::sparse_vector_scanner::lower_bound
bool lower_bound(const SV &sv, const typename SV::value_type val, typename SV::size_type &pos)
lower bound search for an array position
Definition: bmsparsevec_algo.h:1721
bm.h
Compressed bit-vector bvector<> container, set algebraic methods, traversal iterators.
bm::sparse_vector< unsigned, bm::bvector<> >::size_type
bvector_type::size_type size_type
Definition: bmsparsevec.h:87