我尝试使用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,但是显示了同样的错误。
2条答案
按热度按时间czfnxgou1#
set
的迭代器是双向迭代器,这意味着不能减去其中的两个。可以按以下方式计算距离:
std::distance(mn.begin(), it)
但是你需要知道,对于双向迭代器,这是一个O(N)
操作-不是常数时间。fhity93d2#
我也遇到了类似的问题,所以我使用了排序向量而不是集合,并执行了操作(it - v.开始())。