Попробуйте что-то вроде этого:
tabu.erase(
std::remove_if(tabu.begin(), tabu.end(), [valueToErase](const tabuRecord & t) {
return (t.x==valueToErase.x) && (t.y == valueToErase.y) && (t.k == valueToErase.k);
}), tabu.end());
Используется лямбда , которая возвращает true
, если три поля равны, и удаляет все значения, если это так.
Вот полный пример:
#include <vector>
#include <algorithm>
#include <iostream>
int main(int argc, char **argv)
{
tabuRecord valueToErase(1, 2, 3); // example value to remove
tabu.push_back({ 1, 2, 3 });
tabu.push_back({ 4, 5, 6 });
tabu.push_back({ 1, 2, 3 });
tabu.push_back({ 7, 8, 9 });
tabu.erase(
std::remove_if(tabu.begin(), tabu.end(), [valueToErase](const tabuRecord & t) {
return (t.x==valueToErase.x) && (t.y == valueToErase.y) && (t.k ==
valueToErase.k);
}), tabu.end());
for (tabuRecord t : tabu) {
std::cout << "x: " << t.x << " y: " << t.y << " k: " << t.k << std::endl;
} // print all entries to verify that the correct ones were removed
return 0;
}
Кроме того, в вашем конструкторе есть ошибка, вы, вероятно, хотели это вместо того, чтобы устанавливать для всех полей одно и то же значение:
: x(x), y(y), k(k) {}