Удалить элемент из вектора карт - PullRequest
0 голосов
/ 21 декабря 2010

У меня есть вектор карт:

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)'

Спасибо.

Ответы [ 3 ]

2 голосов
/ 21 декабря 2010

1) Прежде всего: приведите один скомпилируемый пример.
Ваш код, размещенный выше, проблематичен, так как rVec и rowVector были взаимозаменяемы (вы бы видели это сами, если бы вы разместили реальный код).1003 * 2) Вы используете неправильное удаление.Это должно быть remove_if

3) Функтор обычно имеет константное значение

4) Оператор () должен получить объект типа aMap (поскольку это то, что находится в вашем векторе), а нессылка на вектор.

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());
}
1 голос
/ 21 декабря 2010

remove ожидает значения.Вы пытаетесь использовать функтор, для этого вам нужно использовать remove_if.

Кроме того, ваш функтор должен принимать объект типа aMap, а не rVec.

0 голосов
/ 21 декабря 2010

remove_if - это то, что вы хотите, а не remove.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...