Вы можете использовать lookup
, например
>>> i = pd.Series(['a', 'a', 'b', 'c', 'b'])
>>> df.lookup(i.index, i.values)
array([ 1, 4, 8, 12, 14])
, где i.index
может отличаться от range(len(i))
, если вы хотите.
В общем, пометка некоторой переменной как rvalue reference
с &&
не означает, что она сохраняет этот статус при прохождении src
дальше. Я имею в виду, в конце концов, переменная имеет имя в контексте конструктора и поэтому может, очевидно, использоваться как lvalue
. На самом деле выражение src
действительно является lvalue
. src
передается вашему конструктору как rvalue
, потому что вызывающая сторона намеревалась интерпретировать его как таковой.
Теперь в вашем конструкторе переменная фактически названа, и использование этого имени приводит к выражению, которое необходимо явно пометить как rvalue reference
, чтобы интерпретировать как таковое. В противном случае, это просто значение. Вот почему вы должны move
снова его интерпретировать вызываемым абонентом (здесь MyMovingBase::ctor
) как rvalue
, содержимое которого может быть перемещено из исходного объекта.
Subclass(Subclass &&src) : MyMovingBase<SubClass>(std::move(src))
делает свое дело.