Какие библиотеки мне нужны для использования std :: placeholder? - PullRequest
8 голосов
/ 23 декабря 2010

В настоящее время я пытаюсь сгенерировать комбинации и использую следующий код:

#include <vector>
#include <algorithm>
#include <iostream>
#include <functional>

template<class RandIt, class Compare>
bool next_combination(RandIt first, RandIt mid, RandIt last)
{
    std::sort(mid, last, std::bind(std::less<int>(), std::placeholders::_2
                                            , std::placeholders::_1));
    return std::next_permutation(first, last, std::less<int>());
}

При использовании g ++ не удается скомпилировать поговорку:

next_combo.cpp: In function ‘bool next_combination(RandIt, RandIt, RandIt)’:
next_combo.cpp:10: error: ‘bind’ is not a member of ‘std’
next_combo.cpp:10: error: ‘std::placeholders’ has not been declared
next_combo.cpp:11: error: ‘std::placeholders’ has not been declared

Я думал, что std ::заполнители были объявлены в функционале, но теперь я запутался.Должен ли я просто использовать boost?

Кроме того, остальная часть проекта использует c ++ 0x, поэтому есть ли лучший способ написать это, используя функции c ++ 0x?

Любая помощьс благодарностью:)

Ответы [ 2 ]

7 голосов
/ 23 декабря 2010

Конечно, есть лучший способ. Используйте std :: большее_equal вместо того, чтобы делать выше. Проверьте здесь что еще есть в функционале.

Забыл сказать - чтобы использовать местозаполнитель, необходимо включить функции c ++ 0x.

5 голосов
/ 23 декабря 2010

почему бы вам не использовать лямбды вместо громоздкого связывания? если вы используете C ++ 0x, имеет смысл написать

std::sort(v.begin(), v.end(), [](int l, int r)->bool { return l > r; });

вместо этого. Обратите внимание, что вам не нужно явно указывать тип возвращаемого значения. Я написал так просто, чтобы было понятнее.

...