Rob*_*lly 8 c++ constructor stl predicate set
所以我有一个数组(0 - n),保存我希望std :: set用于它的排序的值.数组是unsigned int cost [n].
我正在使用以下仿函数进行此排序:
struct ProxySorter {
ProxySorter(const unsigned* arr) : proxy_array(arr) {}
bool operator()(const unsigned& a, const unsigned& b) const {
return proxy_array[a] < proxy_array[b];
}
const unsigned* proxy_array;
};
Run Code Online (Sandbox Code Playgroud)
所以这就是问题......当我构建集合时,这是合法的:
std::set<unsigned, ProxySorter> node_queue = std::set<unsigned, ProxySorter>(ProxySorter(cost));
Run Code Online (Sandbox Code Playgroud)
我没有错误,一切都按预期工作.但这似乎是黑客和草率.
但是,这显然是非法的:
std::set<unsigned, ProxySorter> node_queue(ProxySorter(cost));
Run Code Online (Sandbox Code Playgroud)
试图用ProxySorter(成本)构造它会导致一堆错误,为每个set成员调用说这样的东西:
错误:在node_queue中请求成员擦除,这是非类型类型std :: set <unsigned int,ProxySorter>(ProxySorter)
常规施工有什么问题?为什么作业有效?我错过了什么区别?任何帮助非常感谢,谢谢.
哦,抱歉问题的标题,我不知道该怎么称呼它.
Xeo*_*Xeo 13
最烦恼的解析.你需要另外一对括号:
std::set<unsigned, ProxySorter> node_queue((ProxySorter(cost)));
Run Code Online (Sandbox Code Playgroud)
否则,它将被解释为函数的声明,返回您的集合类型并采用ProxySorter名为的类型的参数cost.
| 归档时间: |
|
| 查看次数: |
866 次 |
| 最近记录: |