gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 04:04:29 24 4
gpt4 key购买 nike

有两个 vector :Indices vector 保存了我们想要从 dataHolder 中获取的索引

std::vector<int> indices{ 2, 3, 7 };

dataHolder vector 保存数据项。可以是任何大小

std::vector<std::wstring> dataHolder{ L"10 kz", L" 20 khz", L"100 khz", L"1 hz", L"5 hz" };

从dataHolder vector 中获取结果 vector

Example : resultvector{L"100 khz", L"1 hz"}

用2个for循环写这样的算法是没有问题的。

有没有使用 using 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 的建议。如果有帮助!

最佳答案

据我所知,您需要做的就是遍历 indices vector ,并将 dataHolder vector 中的相应元素添加到 result.

有点像

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;
result.reserve(indices.size()); // Pre-allocate memory

for (auto index : indices)
{
if (index >= 0 && index < dataHolder.size())
result.push_back(dataHolder[index]);
}

不需要 std::transform 或循环嵌套。并且索引有效性检查解决了indices vector 中无效索引7的问题。

关于c++通过std::transform通过 vector 的索引获取 vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58991600/

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