Возможно, что-то вроде этого:
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
, где гарантировано плоское хранилище.