gpt4 book ai didi

c++ - std::find的替代方法,它返回所有找到的值,而不是仅存在重复项的vector的第一个

转载 作者:行者123 更新时间:2023-12-01 15:07:50 25 4
gpt4 key购买 nike

我一直在用std::find在具有重复值的 vector 中进行测试
我已经注意到std::find将总是从重复的示例中返回第一个值。当我在 vector vecDup中寻找值2时:

std::vector<int> vecDup = { 0, 5, 1, 2, 2, 4 };

auto valIterator = (std::find(vecDup.begin(), vecDup.end(), 2));
if (valIterator != vecDup.end()) {
int value = (*valIterator);
int valueIndex = std::distance(vecDup.begin(), valIterator);
std::cout << "Duplicate value: " << value << " at index " << valueIndex << std::endl;
}

Duplicate value: 2 at index 3


文档指出std::find:
返回一个迭代器,该迭代器比较等于val的[first,last)范围内的第一个元素。如果找不到此类元素,则该函数最后返回。
所以我想std::find不能用于找到多个值。所以我的问题是,我可以使用哪些(如果有)std方法以一种或另一种形式获取这些多个值?我唯一需要的输出是对存在这些重复项的索引的某种引用。
编辑
我知道这不是一个特别困难的问题,可以使用for循环轻松实现。我只是认为这可能是一个常见问题,并且可能已经有某种内置方法可以实现此目的。

最佳答案

如果我答对了,您想让另一个迭代器指向 vector 中特定元素的每个重复项。然后,总是追求良好的循环:

std::vector<std::vector<int>::iterator> vec_of_dup_iters;
auto it = vecDup.begin();
for(it = std::find(it, vecDup.end(), elem); it != vecDup.end(); it = std::find(it, vecDup.end(), elem)) {
vec_of_dup_iters.push_back(it++);
}

但是,我建议不要存储索引,而是在需要时生成 vector ,而不是存储许多 vector :
std::vector<unsigned> vec_of_indices;
for(size_t index = 0; index < vecDup.size(); index++) {
if(vecDup.at(index) == elem) {
vec_of_indices.push_back(index);
}
}
然后将索引添加到 vecDup.begin()以生成迭代器

关于c++ - std::find的替代方法,它返回所有找到的值,而不是仅存在重复项的vector的第一个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62641368/

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