2015-12-12 36 views
2

假设我有一个多集A = {0,1,1,1,2}。如果执行以下操作:multiset lower_bound迭代器的位置

multiset<int>::iterator it = A.lower_bound(2) 

它返回一个迭代器。我可以轻松打印它的价值。但是有什么方法可以知道它的位置吗?我的意思是它会返回4.

+0

您可以使用['标准:: distance'(http://en.cppreference.com/w/cpp/iterator/distance)至从'A.begin()'得到一个偏移量。 –

+0

我正在寻找一些快速的替代品。据我所知距离()的复杂度是O(n)。纠正我,如果我错了 –

+0

是的,它是O(n)该类型的迭代器([双向迭代器](http://en.cppreference.com/w/cpp/concept/BidirectionalIterator)),并没有真的没有更快办法。 –

回答

1

使用std::distance

#include <iterator> 
#include <set> 

int main() 
{ 
    multiset<int> A = { 0, 1, 1, 1, 2 }; 
    multiset<int>::iterator it = A.lower_bound(2); 
    size_t dist = distance(A.begin(), it); 
} 
+0

他们是否有任何快速的选择? –

+0

@伊扎兹阿布拉尔我不知道其他人 – Rabbid76