A small library to work on large sets of indices with optimal memory and runtime performance. Internally IndexSet is using the BitLens library store indices as a bitmask vector. Operations on index sets are performed on data values, which is many orders of magnitude faster than comparing individual indices.
You can easily add IndexSet through CPM.cmake.
CPMAddPackage(
NAME IndexSet
GITHUB_REPOSITORY TheLartians/IndexSet
VERSION 0.1
)
#include <index_set.h>
#include <iostream>
void example() {
// create index sets
auto a = index_set::createIndexSetFromIndices({2, 4, 6});
auto b = index_set::createIndexSetFromIndex(3);
// add and remove single indices (slow)
b.addIndex(6);
a.removeIndex(4);
// perform operations on index sets (very fast)
a.remove(b);
a.add(b);
a.intersect(b);
// iteration
for (auto index: a.indices()) {
std::cout << index << std::endl;
}
// printing
std::cout << a << std::endl;
}