有以下数据类型:

struct Item { double a, b; Item (double a_, double b_): a(a_), b(b_){}};
typedef std::pair <double, Item> TPair;
typedef std::vector <TPair> TData;


我想将2个向量复制到对向量中:

int main(int argc, char* argv[])
{
    std::vector <double> t1;
    std::vector <Item> t2;

    TData data;

    //Error
    std::transform (t1.begin(), t1.end(), data.begin(),
            std::bind2nd( std::ptr_fun( std::make_pair <double,Item > ), double() ) );
}


但是编译器因以下错误而停止:

Error   1   error C2784: 'std::pointer_to_binary_function<_Arg1,_Arg2,_Result,_Result(__fastcall *)(_Arg1,_Arg2)>
std::ptr_fun(_Result (__fastcall *)(_Arg1,_Arg2))' : could not deduce template argument for 'overloaded function type' from 'overloaded function type'
Error   2   error C2784: 'std::pointer_to_binary_function<_Arg1,_Arg2,_Result,_Result(__fastcall *)(_Arg1,_Arg2)>
std::ptr_fun(_Result (__fastcall *)(_Arg1,_Arg2))' : could not deduce template argument for 'overloaded function type' from 'overloaded function type'


问题出在哪里?谢谢你的帮助。编译器MSVS 2010 x86。我更喜欢没有Boost的解决方案。

更新的问题
dasblinkenlight发现了一个错误,已纠正的代码:

std::transform (t1.begin(), t1.end(), data.begin(), std::bind1st( std::ptr_fun( std::make_pair <double,Item > ), double() ) );


但是编译器显示相同的错误...

最佳答案

make_pair<double,Item>的第二个参数是Item,而不是double

std::transform (t1.begin(), t1.end(), data.begin(),
     std::bind2nd( std::ptr_fun( std::make_pair <double,Item > ), Item(0,0) ) );


编辑:对于MS VS,我定义了make_pair如下:

std::pair<double,Item> make_pair(const double db, const Item it) {
    return std::pair<double,Item>(db, it);
}


然后,调用如下所示:

std::transform (t1.begin(), t1.end(), data.begin(),
     std::bind2nd( std::ptr_fun<double,Item,std::pair<double,Item> >( make_pair), Item(0,0) ) );

关于c++ - C++,无法将2个 vector 复制到对 vector ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8934770/

10-10 10:42