C++ std::set中的唯一\u ptr找不到运算符<;尽管如此';在那里

C++ std::set中的唯一\u ptr找不到运算符<;尽管如此';在那里,c++,c++11,clang,unique-ptr,C++,C++11,Clang,Unique Ptr,可能重复: 叮当声,std::shared_ptr和std::less/operator>::operator()'在此处请求 __comp=_M_impl._M_key_compare(_KeyOfValue()(__v),_S_key(__x)); ^ /usr/lib/gcc/x86_64-linux-gnu/4.7/../../../../../../include/c++/4.7/bits/stl_set.h:424:9:注意:>在函数模板专门化的实例化中'std:"Rb_树::Sta

可能重复:
叮当声,std::shared_ptr和std::less/operator>::operator()'在此处请求 __comp=_M_impl._M_key_compare(_KeyOfValue()(__v),_S_key(__x)); ^

/usr/lib/gcc/x86_64-linux-gnu/4.7/../../../../../../include/c++/4.7/bits/stl_set.h:424:9:注意:>在函数模板专门化的实例化中'std:"Rb_树::StateMachine::Transition,std::default_delete>,std::unique(ptr,std:)StateMachine::Transition,std::default\u delete>>,std::allocator::StateMachine::Transition,std::default\u delete>>::::\u M\u insert\u unique::StateMachine::Transition,std::default\u delete>>,此处请求 _M_t._M_insert_unique(标准::移动(__x)); ^

../llvm_opt_pass/cgd.cpp:72:17:注意:在成员函数“std::set::StateMachine::Transition,std::default_delete>,std::less::StateMachine::Transition,std::allocator::StateMachine::Transition,std::default_delete>>::insert”的实例化中,在此处请求 过渡。插入(移动(新建)); ^

/usr/lib/gcc/x86_64-linux-gnu/4.7/../../../../../../../include/c++/4.7/bits/stl_function.h:236:7:注意:候选函数不可行:第一个参数没有从“指针”(aka'::StateMachine::Transition*)到“::StateMachine::Transition*&&&>的已知转换; 运算符()


好的,所以解决方案与这个问题的方法相同:Clang、std::shared\u ptr和std::less/operator尝试提供一个自定义functor作为std::less的替代方法

struct cmp  {
    bool operator() ( const Transition& lhs, const Transition& rhs )  {
        return lhs.toState.get() < rhs.toState.get();
     }
 };

std::set< Transition, cmp > transitions;
struct-cmp{
布尔运算符(){
返回lhs.toState.get();
}
};
std::设置transitions;

这不起作用,因为RHS必须引用同一个对象,因此违反了unique\u ptr的意图。
struct cmp  {
    bool operator() ( const Transition& lhs, const Transition& rhs )  {
        return lhs.toState.get() < rhs.toState.get();
     }
 };

std::set< Transition, cmp > transitions;