C # — OpenSource C ++ библиотека LINQ с точечной нотацией, orderBy и firstOrDefault?

Я ищу совместимую C ++ linq библиотеку VS2010 с точечным синтаксисом C # LINQ. имея в виду что-то вроде: from(...).where(...).orderBy.firstOrDefault();

Я погуглил и нашел это так ответьте на коллекцию библиотек LINQ / беспорядок:

Другие, которые я нашел, не используя точечную нотацию … кстати pfultz2 / Linq кажется, обеспечивает orderBy и, во-первых, его SQL как синтаксис LINQ и Ограничения сделать что-то, что я не ищу = (

Так есть ли какая-нибудь библиотека LINQ C ++ с открытым исходным кодом с точечной нотацией, orderBy и firstOrDefault?

7

Решение

Ну, я не дам вам ответ, который вы хотите, но все равно это будет ответ 🙂

LINQ предназначен для C # в основном. Я думаю, что ваш вариант использования должен быть для перевода кода C # в C ++, но я думаю, что эффективный способ в C ++ это использовать Boost.Range.

Boost.Range повторно использует стандартную библиотеку c ++ таким образом, чтобы легко выполнять запросы к данным:

  1. Вы можете использовать адаптеры для контейнеров с обозначениями слева направо, используя operator |, Они оцениваются лениво, как и в LINQ.
  2. Вы можете выполнять такие операции, как std::min, std::max, std::all_of, std::any_of, std::none_of в адаптированных диапазонах.

Пример, который я написал на днях, — как перевернуть слова в строке.
Решение было что-то вроде этого:

using string_range = boost::iterator_range<std::string::const_iterator>;

struct submatch_to_string_range {
using result_type = string_range;

template <class T>
string_range operator()(T const & s) const {
return string_range(s.first, s.second);

}
};

string sentence = "This is a sentence";

auto words_query = sentence |
ba::tokenized(R"((\w+))") |
ba::transformed(submatch_to_string_range{}) |
ba::reversed;vector<string_range> words(words_query.begin(), words_query.end());

for (auto const & w : words)
cout << words << endl;

Я настоятельно рекомендую вам основывать свои запросы на этой библиотеке, поскольку она будет поддерживаться в течение очень долгого времени, и я думаю, что это будет в будущем.
Вы можете сделать тот же стиль запросов.

Было бы хорошо, если бы эта библиотека могла быть расширена такими вещами, как | max а также | to_vector чтобы не называть вектор напрямую и не копировать, но я думаю, что сейчас, как язык запросов, это более чем приемлемо.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]