C++ 正在使用std::set<;myOwnObjectType>;问题的根源?

C++ 正在使用std::set<;myOwnObjectType>;问题的根源?,c++,C++,我曾经编写过几个程序,当我用自己的对象编写std::set时,编译器没有标记任何错误,但当我试图构建程序时,我得到了一些错误,似乎指向std::set的某个实现文件。例如,在我的程序中,编译器现在指向行 struct _LIBCPP_TYPE_VIS_ONLY less : binary_function<_Tp, _Tp, bool> { _LIBCPP_CONSTEXPR_AFTER_CXX11 _LIBCPP_INLINE_VISIBILITY bool op

我曾经编写过几个程序,当我用自己的对象编写
std::set
时,编译器没有标记任何错误,但当我试图构建程序时,我得到了一些错误,似乎指向
std::set
的某个实现文件。例如,在我的程序中,编译器现在指向行

struct _LIBCPP_TYPE_VIS_ONLY less : binary_function<_Tp, _Tp, bool>
{
    _LIBCPP_CONSTEXPR_AFTER_CXX11 _LIBCPP_INLINE_VISIBILITY 
    bool operator()(const _Tp& __x, const _Tp& __y) const
        {return __x < __y;} // <---- That's the problem line
};
std::set<XMLNode> children;
这可以追溯到那条线

struct _LIBCPP_TYPE_VIS_ONLY less : binary_function<_Tp, _Tp, bool>
{
    _LIBCPP_CONSTEXPR_AFTER_CXX11 _LIBCPP_INLINE_VISIBILITY 
    bool operator()(const _Tp& __x, const _Tp& __y) const
        {return __x < __y;} // <---- That's the problem line
};
std::set<XMLNode> children;
std::设置子对象;
在我的代码中。我的假设正确吗?因为程序不知道如何比较
XMLNode
元素,所以程序很混乱?如果是这样的话,我可以使用什么样的数据结构来类似于
std::set
,除了它可以容纳任何类型的元素之外?我想要的东西能够保存相同类型的对象,而不需要任何重复,最好是能够快速访问。

树(集合的底层结构)依赖于能够比较对象,从而决定在哪个分支中插入它们,并最终提供O(logn)访问


因此,如果您想使用
std::set
,您的类型需要提供一种比较对象的方法-通过
操作符编写您自己的比较函子的全部要点是,您的代码应该知道如何在两个对象之间进行有意义的比较。您可以尝试
unordered\u set
,但为此您需要编写一个哈希函数。这意味着您需要实现小于(