我有一个集合,即多集类型,我正在尝试使用 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
因为不需要连续内存块,因此更具可扩展性。