まあ、私はあなたが望むような返事はしませんが、とにかく返事をします:-)
LINQ は主に C# 向けと考えられています。あなたのユース ケースは C# コードを C++ に変換するためのものだと思いますが、C++ で効果的な方法はBoost.Rangeを使用することだと思います。
Boost.Range は、データに対してクエリを実行しやすい方法で C++ 標準ライブラリを再利用します。
- を使用して、左から右への表記でコンテナーのアダプターを使用できます
operator |
。これらは、LINQ と同様に遅延評価されます。
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
が、クエリ言語としては、現時点では許容範囲を超えていると思います。