【发布时间】:2019-11-22 09:51:24
【问题描述】:
有两个向量: Indices 向量保存着我们想从 dataHolder 中获取的索引
std::vector<int> indices{ 2, 3, 7 };
dataHolder 向量保存数据项。可以是任意大小
std::vector<std::wstring> dataHolder{ L"10 kz", L" 20 khz", L"100 khz", L"1 hz", L"5 hz" };
从dataHolder向量中获取结果向量
Example : resultvector{L"100 khz", L"1 hz"}
这样的算法用2个循环写是没问题的。
有没有使用 std::transform 的解决方案?
它可能关注的对象:
当前的实现
#include "pch.h"
#include <iostream>
#include <vector>
#include <algorithm>
int main()
{
std::vector<int> indices{ 2, 3, 7 };
std::vector<std::wstring> dataHolder{ L"10 kz", L" 20 khz", L"100 khz", L"1 hz", L"5 hz" };
std::vector<std::wstring> result;
for (int index = 0; index < dataHolder.size(); index++)
{
if (std::any_of(indices.begin(), indices.end(), [&](int dataVal) { return index == dataVal; }))
result.push_back(dataHolder.at(index));
}
}
我认为这具有二次复杂性。所以我正在寻找关于 std::transform 的建议。如果有帮助!
【问题讨论】:
-
如何获得
resultvector?其中的两个元素是如何从dataHolder中挑选出来的,indices起到什么作用?你目前的算法是什么? -
目前我用简单的 for 循环遍历 dataHolder 项目,然后用另一个内部循环在索引向量中找到索引。这就是为什么我提到这可以用 2 循环来完成。 resultvector 是预期的输出向量。
-
你能给我们看看吗?请创建您当前算法的minimal reproducible example,显示的
resultvector是如何填充的。indices中有三个值,这如何转换为resultvector中的两个值? “索引”7如何适合您的五元素dataHolder向量? -
实际问题是什么?为什么你需要使用
std::transform?这两个循环有什么问题?而且,你的算法实际上是做什么的?起初我认为它采用第一个向量中的索引并在这些索引处提取第二个向量的条目。但这显然只需要一个循环,并且与您的示例不匹配(索引向量有三个条目,结果向量有两个)。您确实应该向我们展示代码,然后谈谈为什么该代码不够用(例如“时间复杂度太高”)。 -
@Someprogrammerdude 请查看当前实现的编辑。我认为这很简单。
标签: c++