[c ++通过std :: transform通过vector的索引获取vector

问题描述 投票:-1回答:2

有两个向量:索引向量包含我们想要从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的建议。如果有帮助!

c++
2个回答
0
投票

可以用std::transform完成,但必须返回一个值。


0
投票

[根据我所看到的,您需要做的是迭代indices向量,并将dataHolder向量中的相应元素添加到result

© www.soinside.com 2019 - 2024. All rights reserved.