Как стереть значение из вектора структуры с помощью идиомы erase-remove?

В Windows 8.1 ниже работали, в то время как другие заданные способы с subprocess.call терпят неудачу с путём, в нем есть пробелы.

subprocess.call('cmd /c start "" "any file path with spaces"')

Используя этот и другие ответы раньше, вот встроенный код, который работает на нескольких платформах.

import sys, os, subprocess
subprocess.call(('cmd /c start "" "'+ filepath +'"') if os.name is 'nt' else ('open' if sys.platform.startswith('darwin') else 'xdg-open', filepath))
0
задан djankooo 16 January 2019 в 10:14
поделиться

1 ответ

Попробуйте что-то вроде этого:

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) {}
0
ответ дан Blaze 16 January 2019 в 10:14
поделиться
Другие вопросы по тегам:

Похожие вопросы: