gpt4 book ai didi

c++ - 'std::pair, bool> std::_Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::_M_insert_unique 需要

转载 作者:行者123 更新时间:2023-11-28 01:42:53 24 4
gpt4 key购买 nike

我遇到编译错误,

required from 'std::pair<std::_Rb_tree_iterator<_Val>, bool> std::_Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::_M_insert_unique(_Arg&&) [with _Arg = Solution::EnhancedNode* const&; _Key = Solution::EnhancedNode*; _Val = Solution::EnhancedNode*; _KeyOfValue = std::_Identity<Solution::EnhancedNode*>; _Compare = Solution::EnhancedNodeComparator; _Alloc = std::allocator<Solution::EnhancedNode*>]'

不幸的是没有行号,但我删除了代码部分,我相信它与我想应用自定义比较器的 std::set 有关:

class EnhancedNode {
public:
EnhancedNode(TreeNode* node) {
node_ = node;
distance_ = numeric_limits<double>::max();
discarded_ = false;
}
TreeNode* node_;
double distance_;
bool discarded_;
};
struct EnhancedNodeComparator {
bool operator() (const EnhancedNode*& a, const EnhancedNode*& b) const {
return a->distance_ < b->distance_;
}
};
set<EnhancedNode*, EnhancedNodeComparator> closest_;
set<EnhancedNode*, EnhancedNodeComparator> next_;

我做错了什么吗?

最佳答案

std::set 的比较器绝对应该接受对集合中的 const 限定类型的引用。

你弄错的是集合中类型的限定。它是 EnhancedNode*,因此用 const 限定它应该给出 EnhancedNode* const。而不是 const EnhancedNode*

这又是一个前导 const 被误导的案例。将您原来的比较器,引用和所有更改为:

struct EnhancedNodeComparator {
bool operator() (EnhancedNode const * const& a, EnhancedNode const * const& b) const {
return a->distance_ < b->distance_;
}
};

您也可以保留 const 限定的指针。 Since C++ explicitly allows it .

删除引用后问题得到解决的原因是 top-level const is ignored按值传递时。因此,您的函数作为参数收到的指针不是 const 限定的并不重要。它只是原件的拷贝。

关于c++ - 'std::pair<std::_Rb_tree_iterator<_Val>, bool> std::_Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::_M_insert_unique 需要,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46463453/

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