GitHunt
TH

TheLartians/IndexSet

A class for manipulating large sets of indices with optimal performance and memory use

Actions Status
Actions Status
Actions Status
Actions Status
Actions Status
codecov

IndexSet

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.

Usage

You can easily add IndexSet through CPM.cmake.

CPMAddPackage(
  NAME IndexSet
  GITHUB_REPOSITORY TheLartians/IndexSet
  VERSION 0.1
)

API

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

Languages

CMake64.9%C++35.1%

Contributors

MIT License
Created April 13, 2020
Updated March 9, 2026
TheLartians/IndexSet | GitHunt