gpt4 book ai didi

c++ - 如何根据 `std::vector` 中的元素对 `std::set` 进行切片

转载 作者:可可西里 更新时间:2023-11-01 18:26:16 26 4
gpt4 key购买 nike

有没有一种根据 std::set 中的元素对 std::vector 进行切片的好方法?换句话说,std::set 中的元素包含我想要在 vector 中的索引。当然,我可以用代码完成这个:

#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"));
}

正确返回

1.2
4.5
5.6

然而,这感觉有点笨拙。有没有更好的办法?

最佳答案

您可以通过简单地使用 std::transform 来实现:

int main()
{
std::vector<double> x { 1.2, 2.3, 3.4, 4.5, 5.6};
std::set<unsigned int> I { 0, 3, 4};
std::vector<double> y(I.size());

std::transform(I.begin(), I.end(), y.begin(),
[&x](unsigned int i) { return x[i]; });

std::copy(y.begin(),y.end(),std::ostream_iterator <double>(std::cout,"\n"));
}

关于c++ - 如何根据 `std::vector` 中的元素对 `std::set` 进行切片,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35590050/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com