EnTT
EnTT is a header-only, tiny and easy to use framework written in modern C++. It was originally designed entirely around an architectural pattern called ECS that is used mostly in game development.
Code Example
#include <entt/entt.hpp>
#include <cstdint>
struct Position {
    float x;
    float y;
};
struct Velocity {
    float dx;
    float dy;
};
void update(entt::DefaultRegistry ®istry) {
    auto view = registry.view<Position, Velocity>();
    for(auto entity: view) {
        // gets only the components that are going to be used ...
        auto &velocity = view.get<Velocity>(entity);
        velocity.dx = 0.;
        velocity.dy = 0.;
        // ...
    }
}
void update(std::uint64_t dt, entt::DefaultRegistry ®istry) {
    registry.view<Position, Velocity>().each([dt](auto entity, auto &position, auto &velocity) {
        // gets all the components of the view at once ...
        position.x += velocity.dx * dt;
        position.y += velocity.dy * dt;
        // ...
    });
}
int main() {
    entt::DefaultRegistry registry;
    std::uint64_t dt = 16;
    for(auto i = 0; i < 10; ++i) {
        auto entity = registry.create(Position{i * 1.f, i * 1.f});
        if(i % 2 == 0) { registry.assign<Velocity>(entity, i * .1f, i * .1f); }
    }
    update(dt, registry);
    update(registry);
    // ...
}