У меня есть C++ 11 подобный кодстанд :: преобразование с лямбда: пропустить некоторые элементы
std::vector<std::string> names;
std::map<std::string, std::string> first_to_last_name_map;
std::transform(names.begin(), names.end(), std::inserter(first_to_last_name_map, first_to_last_name_map.begin()), [](const std::string& i){
if (i == "bad")
return std::pair<std::string, std::string>("bad", "bad"); // Don't Want This
else
return std::pair<std::string, std::string>(i.substr(0,5), i.substr(5,5));
});
где я преобразуя вектор на карте с помощью зЬй :: преобразование с лямбда-функции. Моя проблема в том, что иногда, как показано, я не хочу ничего возвращать из своей лямбда-функции, т. Е. Я в основном хочу пропустить это i
и перейти к следующему (без добавления чего-либо на карту).
Есть ли способ достичь того, о чем я думаю? Я могу использовать boost, если это помогает. Я хочу избежать решения, когда я должен выполнить предварительный процесс или пост-процесс на моем векторе, чтобы отфильтровать «плохие» элементы; Мне нужно будет только разглядывать каждый элемент один раз. Кроме того, моя фактическая логика немного сложнее, чем if/else, как написано, поэтому я считаю, что было бы неплохо сохранить вещи, инкапсулированные в эту std :: transform/лямбда-модель, если это возможно (хотя, возможно, то, чего я пытаюсь достичь с этой моделью невозможно).
EDIT: Чтобы подчеркнуть, я хочу выполнить эту операцию (выборочно обрабатывая векторные элементы и вставляя их в карту) наиболее эффективным способом, даже если это означает менее элегантное решение или большой переписать. Я мог бы даже использовать другой тип данных карты в зависимости от того, что является наиболее эффективным.
лично, я бы написал функцию шаблона 'transform_if' - это отразило бы схему именования других алгоритмов типа' copy_if' и сохранит полученный код простым и понятным. – jaggedSpire