使用 std::set 是<myOwnObjectType>问题的根源吗?
Is using std::set<myOwnObjectType> a source of problems?
我做了几个程序,当我用自己的对象编写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
};
有错误
Invalid operands to binary expression ('const XMLNode' and 'const XMLNode')
这可以追溯到生产线
std::set<XMLNode> children;
在我的代码中。我的假设是否正确,即程序因为不知道如何比较XMLNode
元素而感到困惑?如果是这样,除了它能够容纳任何类型的元素之外,我可以使用类似于std::set
的数据结构是什么?我想要一些可以容纳相同类型对象的东西,没有任何重复,最好是快速访问。
树(集合的底层结构)依赖于能够比较对象,以便决定将它们插入哪个分支,并最终提供 O(log n) 访问。
因此,如果你想使用std::set
,你的类型需要提供一种比较对象的方法 - 通过operator <
,std::less<XMLNode>
的实现,或者通过在声明集合时传递你的比较器Compare
,它的第一个模板参数。
如果比较的概念不适用于 XMLNode,那么您可能有兴趣制定人为的比较标准,或者使用 std::unordered_set
(提供摊销的 O(1) 访问)并提供std::hash<XMLNode>
实现。
相关文章:
- 警告处理为错误这里有什么问题
- 最小硬币更换问题(自上而下方法)
- 为"adjacent"变量赋值时出现问题
- 我的神经网络不起作用 [XOR 问题]
- 在Ubuntu 16.04上安装Cilk时出现问题
- C++我的数学有什么问题,为什么我的代码不能正确循环
- 编译包含字符串的代码时遇到问题
- Project Euler问题4的错误解决方案
- 问题:什么是QAbstractItemView::NoEditTriggers的反面
- 在编译C++代码(具有dlib和opencv)到WASM时面临问题
- 在进程中对同一管道进行读取和写入时C++管道出现问题
- 静态数据成员的问题-修复链接错误会导致编译器错误
- C++ 雷神库 - 使用资源加载器类时出现问题(不命名类型)
- 一个关于在C++中重载布尔运算符的问题
- 首要问题的答案让值班员搞错了
- setlocale的C++土耳其字符串问题
- 如何重构类层次结构以避免菱形问题
- 基于boost的程序的静态链接——zlib问题
- C++格式化输出问题
- 使用mongocxx驱动程序时包含头文件问题