C++ 设置:不匹配 - 运算符



我有一个集合,即多集类型,我正在尝试使用 upper_bound 函数来查找迭代器返回的元素的索引。通常使用向量,如果我得到迭代器并从中减去 vector.begin() 以获得答案,它就会起作用。
但是,当我尝试使用集合执行此操作时,它会给出一个 STL 错误,说"运算符不匹配 -"在...(省略 STL 详细信息)

这是否有根本原因(集合被实现为 RB 树和所有)。如果是这样,任何人都可以建议替代方案吗?(我正在尝试解决编程站点上的问题)

谢谢!

是的,有不同类型的迭代器,operator-不支持非随机访问的集合迭代器。

您可以使用std::distance( mySet.begin(), iter );

我认为对于 std::set(和多集),与向量恒定时间和列表线性相比,这可能是一个O(log N)操作。

您确定要将数据存储在std::multiset中吗?您可以改用排序向量。如果定期编辑矢量,则矢量会变慢,即您尝试从任何地方插入和删除元素,同时保持其排序状态。如果数据构建一次然后多次访问,则排序向量有时可能更有效。

如果数据集非常大,请考虑使用 std::deque 而不是 std::vector deque因为不需要连续内存块,因此更具可扩展性。

相关内容

最新更新