std::set
の要素に基づいてstd::vector
をスライスする良い方法はありますか?言い換えれば、std::set
の要素は、ベクトルに必要なインデックスを保持しています。確かに、私はコードでこれを達成することができます:`std :: set`の要素に基づいて` std :: vector`をスライスする方法
1.2
4.5
5.6
を返し
#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"));
}
をしかし、これは少し不器用な感じ。より良い方法がありますか?
を使用することができ、 'のstd ::ベクトル:: reserve'を忘れないでください。 – LogicStuff