Если вы хотите преобразовать целую серию pandas datetimes в регулярные datetimes python, вы также можете использовать .to_pydatetime()
.
pd.date_range('20110101','20110102',freq='H').to_pydatetime()
> [datetime.datetime(2011, 1, 1, 0, 0) datetime.datetime(2011, 1, 1, 1, 0)
datetime.datetime(2011, 1, 1, 2, 0) datetime.datetime(2011, 1, 1, 3, 0)
....
Он также поддерживает часовые пояса:
pd.date_range('20110101','20110102',freq='H').tz_localize('UTC').tz_convert('Australia/Sydney').to_pydatetime()
[ datetime.datetime(2011, 1, 1, 11, 0, tzinfo=<DstTzInfo 'Australia/Sydney' EST+11:00:00 DST>)
datetime.datetime(2011, 1, 1, 12, 0, tzinfo=<DstTzInfo 'Australia/Sydney' EST+11:00:00 DST>)
....
Итак, что касается первой части сообщения об ошибке
no matching function for call to ‘branch_and_bound(Repr&,
std::vector<std::pair<knapsack, std::vector<int> > > (&)(Repr), bool(&)(Repr), float (&)(Repr), <unresolved overloaded function type>)’
Часть неразрешенного типа перегруженной функции> отмечает параметр, по которому вы передаете lower_bound
. Это означает, что есть больше функций с таким именем, и компилятор не может решить, какую из них вы имеете в виду.
В заголовке <algorithm>
есть функции std::lower_bound
, что означает, что у вас есть using namespace std;
где-то.
Теперь должно быть понятно, почему это работает, когда есть последний параметр шаблона по умолчанию - компилятору не нужно угадывать тип.
Проблемой оказывается имя функции в определении функции float lower_bound(Repr)
. К сожалению, lower_bound
конфликтует с функцией из стандартной библиотеки в <algorithm>
. Без шаблона по умолчанию у компилятора было недостаточно информации, чтобы различать пользовательскую функцию и стандартную библиотеку.