给定一个索引列表,如何从 std::vector 中删除这些元素?

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

我先描述一下更高层次的目标。我有一个布尔矩阵(我使用

std::vector<std::vector<bool>>
作为表示)。

我想删除整行都是

true
值的所有行。

目前,我做的是:


bool is_row_true(const vector<bool>& row) {
  return all_of(row.begin(), row.end(), [](bool val) {
    return val;
  });
}


for (int i = 0; i < mat.size(); ++i) {
    if (is_row_true(mat[i])) {
      std::erase(mat.begin() + i);
    }
}

但是,这似乎效率很低。相反,我考虑获取行全部为 true 的索引列表,并传入索引列表并同时删除所有这些行。有没有办法在容器库的功能中做到这一点?

c++ vector
1个回答
0
投票

这完成了工作:

#include <vector>
#include <algorithm>

bool is_row_true(const std::vector<bool>& row) {
    return std::all_of(row.begin(), row.end(), [](bool val) {return val; });
}

int main()
{
    std::vector<std::vector<bool>> mat{ {true, false},{true, true}, {true, true} };
    std::erase_if(mat, [](auto& x) {return is_row_true(x); });
}
© www.soinside.com 2019 - 2024. All rights reserved.