gpt4 book ai didi

c++ - 为什么我不能用谓词的实例化构造 std::set,但我可以分配以这种方式构造的 std::set?

转载 作者:可可西里 更新时间:2023-11-01 17:35:44 36 4
gpt4 key购买 nike

所以我有一个数组 (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;
};

问题来了...当我构建集合时,这是合法的:

std::set<unsigned, ProxySorter> node_queue = std::set<unsigned, ProxySorter>(ProxySorter(cost));

我没有收到任何错误,一切都按预期进行。但这似乎被黑客攻击和草率。

但是,这显然是非法的:

std::set<unsigned, ProxySorter> node_queue(ProxySorter(cost));

尝试仅使用 ProxySorter(cost) 构造它会导致一堆错误,对每个 set 成员调用都会说这样的话:

error: request for member erase in node_queue, which is of non-class type std::set<unsigned int, ProxySorter>(ProxySorter)

常规施工有什么问题?为什么作业有效?我想念的有什么区别?非常感谢任何帮助,谢谢。

哦,很抱歉这个问题的标题,我真的不确定该怎么调用它。

最佳答案

Most-vexing-parse .你需要另一对括号:

std::set<unsigned, ProxySorter> node_queue((ProxySorter(cost)));

否则它将被解释为返回您的集合类型并采用名为 costProxySorter 类型参数的函数声明。

关于c++ - 为什么我不能用谓词的实例化构造 std::set,但我可以分配以这种方式构造的 std::set?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8207049/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com