В чем полезность project1st <Arg1, Arg2> в STL? - PullRequest
4 голосов
/ 06 декабря 2008

Я просматривал документацию SGI STL и наткнулся на project1st<Arg1, Arg2>. Я понимаю его определение, но мне трудно представить себе практическое применение.

Вы когда-нибудь использовали project1st или можете представить сценарий?

Ответы [ 4 ]

3 голосов
/ 08 декабря 2008

Вариант project1st (принимая std::pair и возвращая .first) весьма полезен. Вы можете использовать его в сочетании с std::transform, чтобы скопировать ключи из std::map<K,V> в std::vector<K>. Аналогично, вариант project2nd можно использовать для копирования значений из карты в vector<V>.

Как оказалось, ни один из стандартных алгоритмов действительно не выигрывает от project1st. Ближайшим является part_sum (project1st), который установит все выходные элементы в первый входной элемент. Он существует главным образом потому, что STL в значительной степени основан на математической теории множеств, и там такие операции, как project1st, являются базовыми строительными блоками.

2 голосов
/ 06 декабря 2008

Я предполагаю, что если вы использовали шаблон стратегии и имели ситуацию, когда вам нужно было передать объект идентификации, это был бы хороший выбор. Например, может быть случай, когда алгоритм принимает несколько таких объектов, и, возможно, вы хотите, чтобы один из них ничего не делал в какой-то ситуации.

1 голос
/ 05 января 2010

Параллельное программирование. Представьте себе ситуацию, когда два процесса дают два действительных, но разных результата для данного вычисления, и вам нужно заставить их быть одинаковыми. project1st / 2nd предоставляет очень удобный способ выполнить эту операцию для всего контейнера, используя соответствующий параллельный вызов, который принимает функтор в качестве аргумента.

0 голосов
/ 06 декабря 2008

Я предполагаю, что кто-то имел практическое применение для этого, или это не было бы написано, но я рисую пробел на том, что это могло бы быть. Предположительно, его вариант использования аналогичен функции identity, о которой упоминается в описании, где нет реальной необходимости в обработке, но в любом случае синтаксис требует функтор.

Пример на той же странице предлагает использовать его с формой с двумя контейнерами std::transform, но если я не ошибаюсь, то, как они его используют, функционально идентичен std::copy, поэтому я не не вижу смысла.

Мне кажется, это решение проблемы в поисках проблемы.

...