如何使用基于另一个向量的谓词删除向量的元素
How to remove elements of a vector with a predicate based on another vector
我有两个向量
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 上完全相同的索引。这当然可以推广到任意类型或任意谓词的向量。我怎样才能最优雅地做到这一点?
也许是这样的:
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
,保证平面存储。
我有两个向量
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 上完全相同的索引。这当然可以推广到任意类型或任意谓词的向量。我怎样才能最优雅地做到这一点?
也许是这样的:
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
,保证平面存储。