如何使用基于另一个向量的谓词删除向量的元素

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

我有两个向量

std::vector<Mat> images;
std::vector<std::string> image_paths;

并希望过滤出图像为空的两个向量中的索引。这可以在单个向量上轻松完成:

std::remove_if(images.begin() images.end(), [](const Mat& img) { return img.empty(); });

但是现在我想在image_paths上删除相同的索引。这当然可以推广到任意类型的向量或任意谓词。我怎样才能最优雅地做到这一点?

c++11 vector stl erase
1个回答
1
投票

也许这样的东西:

std::erase(std::remove_if(image_paths.begin(), image_paths.end(),
  [&](const std::string& path) {
    auto index = &path - &image_paths.front();
    return images[index].empty();
  }), image_paths.end());

std::erase(std::remove_if(images.begin(), images.end(),
  [](const Mat& img) { return img.empty(); }), images.end());

仅适用于std::vector,保证平面存储。

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