我有一个集合,即类型multiset,我正在尝试使用upper_bound函数来查找迭代器返回的元素的索引.通常使用向量,如果我得到迭代器并从中减去vector.begin()以获得答案,它就可以工作.
但是,当我尝试使用它时,它会产生一个STL错误,在...中说"不匹配运算符 - "(省略STL详细信息)
是否有一个根本原因(设置实现为RB树和所有).如果是这样,有人可以建议替代吗?(我正在尝试解决编程网站上的问题)
谢谢!
是的,有不同类型的迭代器,operator-并且不支持非随机访问的set迭代器.
您可以使用 std::distance( mySet.begin(), iter );
我认为对于std :: set(和multiset),这可能是一个O(log N)操作,相比之下,它是矢量的常量时间和列表的线性.
您确定要将数据存储在一个std::multiset?您可以使用排序向量.矢量较慢的地方是它是否经常编辑,即你试图从任何地方插入和删除元素,同时保留其排序状态.如果数据构建一次然后多次访问,则有序矢量有时可能更有效.
如果数据集非常大,请考虑使用std::deque而不是std::vector因为deque在不需要连续内存块的情况下更具可扩展性.