[英]How to use lower_bound/upper_bound to get index number from std::set?
我正在嘗試使用 STL 提供的二進制搜索 function,它需要先對向量進行排序。 所以這就是我嘗試直接使用 Set 的原因,這樣我就不必先進行排序。
但是當使用以下方式設置時,
`
#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,但顯示相同的錯誤。
set
的迭代器是雙向迭代器,這意味着您不能減去其中的兩個。
您可以這樣計算距離: std::distance(mn.begin(), it)
但您需要注意,對於雙向迭代器,這是一個O(N)
操作 - 不是恆定時間。
我也陷入了類似的問題,所以我使用排序的向量而不是集合並執行操作(它 - v.begin())。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.