Beh, io non vi darà la risposta che si desidera, ma sarà una risposta in ogni caso :-)
LINQ è pensato per C#, soprattutto. Penso che il tuo caso d'uso dovrebbe essere quello di tradurre il codice C# in C++, ma penso che il modo efficace in C++ sia quello di usare Boost.Range.
Boost.Range riutilizza la libreria C++ standard in un modo che è facile da fare interrogare sui dati:
- È possibile utilizzare adattatori per contenitori con la notazione sinistra a destra usando
operator |
. Vengono valutati pigramente, proprio come in LINQ.
- È possibile eseguire operazioni come
std::min, std::max, std::all_of, std::any_of, std::none_of
negli intervalli adattati.
Un esempio che ho scritto l'altro giorno è come invertire le parole in una stringa. La soluzione è stata qualcosa di simile:
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;
consiglio vivamente di basare le vostre domande su questa biblioteca, dal momento che questo sta per essere supportato per un tempo molto lungo e penso che sarà il futuro. Puoi fare lo stesso stile di query.
Sarebbe bello se questa libreria potrebbe essere esteso con le cose come | max
e | to_vector
per evitare nominare direttamente e copia il vettore, ma penso che come un linguaggio di query, in questo momento, è più che accettabile.
fonte
2013-11-18 05:53:38
Il termine "stabile" sort [ha un significato speciale] (http://en.wikipedia.org/wiki/Sorting_algorithm#Stability), che non penso tu intenda qui - dovresti riformulare. –
@EamonNerbonne: riformulato. – myWallJSON
Se non ce n'è uno che soddisfi tutte le tue esigenze. È ora di iniziare l'hacking. Potresti migliorare uno dei più forti di loro o iniziare da solo. –