c++ 如何使用lower_bound/upper_bound从std::set中获取索引号?

jhdbpxl9  于 2022-12-15  发布在  其他
关注(0)|答案(2)|浏览(175)

我尝试使用STL提供的二进制搜索功能,它需要一个向量先排序。所以这就是为什么我尝试直接使用集合,所以我不必先排序。
但是当以下面的方式设置时,
'

#include <bits/stdc++.h>
using namespace std;
int main(){
set <int> mn = {11, 33, 44, 66, 80,90};
auto it= mn.lower_bound(55);
cout<<it-mn.begin();
    return 0;
}

`
出现一个错误:
错误:“operator-”不匹配(操作数类型为“std::_Rb_tree_const_iterator”和“std::set::iterator”
这里怎么用set得到返回迭代器的索引号?
PS:我也试过使用set::lower_bound,但是显示了同样的错误。

czfnxgou

czfnxgou1#

set的迭代器是双向迭代器,这意味着不能减去其中的两个。
可以按以下方式计算距离:std::distance(mn.begin(), it)但是你需要知道,对于双向迭代器,这是一个O(N)操作-不是常数时间。

fhity93d

fhity93d2#

我也遇到了类似的问题,所以我使用了排序向量而不是集合,并执行了操作(it - v.开始())。

相关问题