完整代码在https://gist.github.com/1341623
我想对另一个向量的索引数组(或向量)进行排序,以便数组按另一个向量的索引排序。但是,vector::at 的类型无法解析。
我做了如下尝试:
还行吧
sort(v.begin(), v.end());
我想根据数组对索引进行排序,但占位符不会重载 operator[]
sort(index,index+10, a[_1] < a[_2]);
但是,它们重载了 operator+ 和 operator*
sort(index,index+10, *(a+_1) < *(a+_2));
我想根据向量对索引进行排序,但编译器无法解析“vector::at”的类型。
sort(index,index+10,
bind(&(vector<int>::at), &v, _1) < bind(&(vector<int>::at), &v, _2));
// error: no matching function for call
// to ‘bind(<unresolved overloaded function type>, ...
在网上搜索后,我发现我必须指定重载的方法类型,但编译器仍然说它无法解析类型。
sort(index,index+10,
bind(&static_cast<const int (*)(size_t)>(vector<int>::at), &v, _1)
< bind(&static_cast<const int (*)(size_t)>(vector<int>::at), &v, _2));
// error: invalid static_cast from type ‘<unresolved overloaded function type>’
// to type ‘const int (*)(size_t)’ ...
我试图获得我想要的 vector::at 版本,但转换似乎失败了。
vector<int>::const_reference (*vector_int_at)(vector<int>::size_type)(vector<int>::at);
sort(index,index+10,
bind(&vector_int_at, &v, _1) < bind(&vector_int_at, &v, _2));
// error: no matches converting function ‘at’ to type ‘const int& (*)(size_t)’ ...
我可以为这个问题做些什么?还是我误解了什么?