c++ - 从 map vector 中删除元素

标签 c++ stl

我有一个 map vector :

typedef map<string, string> aMap;
typedef vector<aMap> rVec;
rVec rows;

如何从行中删除一些元素?

以下代码无效。

struct remove_it
{
  bool operator() (rVec& rows)
  {
    // Validation code here!

  }
};

rVec::iterator it = remove(rows.begin(), rows.end(), remove_it());
rows.erase(it, rows.end());

我收到以下错误。

error: no matching function for call to 'remove(std::vector<s
td::map<std::basic_string<char>, std::basic_string<char> > >::iterator, std::vec
tor<std::map<std::basic_string<char>, std::basic_string<char> > >::iterator, mai
n(int, char**)::remove_it)'

谢谢。

最佳答案

1) 首先:请提供一个可编译的例子。
您上面发布的代码有问题,因为 rVec 和 rowsVector 已互换(如果您发布了真实代码,您自己就会看到)。

2) 您使用了错误的删除。应该是remove_if

3) 仿函数为const是正常的

4) operator() 应该获取类型为 aMap 的对象(因为它在您的 vector 中)而不是对 vector 的引用。

5) 不要偷懒在标准命名空间中的对象前面添加 std::。
而不是使用 using namespace std;

#include <map>
#include <vector>
#include <string>
#include <algorithm>

typedef std::map<std::string, std::string> aMap;
typedef std::vector<aMap>        rVec;

rVec rows;

struct remove_it
{
                 // Corrected type here
  bool operator() (aMap const& row) const  // const here
  {
    // Validation code here!
    return true;
  }
};

int main()
{
                                 // _if herer
    rVec::iterator it = std::remove_if(rows.begin(), rows.end(), remove_it());
    rows.erase(it, rows.end());
}

关于c++ - 从 map vector 中删除元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4494274/

相关文章:

c++ - 查找图像上的主色

c++ - 正则表达式/Unix 工具,用于在 C++ 文件中的每个函数定义的开头之前插入一个新行

c++ - 填充插入() - 复制构造函数和复制赋值 noexcept 状态?

c++ - 将基场设置为零

c++ - 为什么STL集合大小的复杂度是O(1),它是如何计算的?

c++ - 是否可以使用 WFP 发送带有有效负载的 tcp syn 数据包?

c++ - 如何用caffe加载图片?

c++ - 如何在 VC++ 中创建可变大小的字符数组

c++使用STL从字符串中删除字符

c++ - 使用具有未定义行为的(STL)拷贝?