簡體   English   中英

如何使用 lower_bound/upper_bound 從 std::set 獲取索引號?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM