Gibt es eine gute Möglichkeit, eine std::vector
basierend auf Elementen in einer std::set
zu schneiden? Mit anderen Worten, die Elemente in std::set
enthalten die Indizes, die ich im Vektor haben möchte. Sicher, ich dies mit dem Code ausführen kann:Wie schneidet man einen `std :: vector` auf Basis von Elementen in` std :: set`
#include <set>
#include <vector>
#include <iostream>
#include <iterator>
template <typename T>
std::vector <T> slice(
std::vector <T> const & x,
std::set <unsigned int> const & I
) {
auto y = std::vector <T>();
for(auto const & i : I)
y.push_back(x[i]);
return y;
}
int main() {
auto x = std::vector <double> { 1.2, 2.3, 3.4, 4.5, 5.6};
auto I = std::set <unsigned int> { 0, 3, 4};
auto y = slice(x,I);
std::copy(y.begin(),y.end(),std::ostream_iterator <double>(
std::cout,"\n"));
}
, die korrekt zurückgibt
1.2
4.5
5.6
Allerdings fühlt sich das ein wenig unbeholfen. Gibt es einen besseren Weg?
Vergessen Sie nicht 'std :: vector :: reserve' nutzen könnten. – LogicStuff