我有一个 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/