/linq11

A LINQ library for C++11.

Primary LanguageC++MIT LicenseMIT

linq11 - LINQ for C++11

http://cemdervis.github.io/linq11/

linq11 is a header-only LINQ library for C++11 with minimal dependencies. It neatly integrates into the STL and takes advantage of C++11 features, mainly the range-based for loop and lambda functions.

Example:

#include <iostream>
#include <string>
#include <vector>
#include "linq.h"

using namespace std;

struct Person
{
    string Name;
    int Age;
};

int main()
{
    vector<Person> people = {
        { "P1", 20 },
        { "P2", 21 },
        { "P3", 22 }
    };

    auto query = linq::from(&people)
        .where([](const Person& p) { return p.Age > 20; });

    for (const auto& p : query)
        cout << p.Name << ", " << p.Age << endl;

    return 0;
}

Output:

P2, 21
P3, 22

linq11...

  • resolves all type related functionality at compile-time; no virtual dispatch is used
  • uses lazy evaluation, so your queries still work even after you modify the container it's based on
  • is extremely efficient in the way it works with your data; it avoids making copies and passes by reference wherever it can
  • does not maintain a flat list of operators in your query, but rather generates a linked-list at compile time
  • does not use exceptions
  • does not use boost or any other library
  • works with everything that behaves like an STL container. So vector, maps, strings, ...
  • tries to notify the user of errors at compile-time whenever it can (static_assert)
  • is licensed under the MIT license
  • uses the beloved dot operator!

Supported LINQ Operators