我需要查找std::set
中有多少元素低於給定值。計算std :: set中低於給定值的元素
我認爲正確的功能是使用std::lower_bound
,它返回一個迭代器到大於或等於給定的第一個元素....所以這個迭代器的索引是我正在尋找...但我無法從迭代器找到索引:
#include <iostream>
#include <algorithm>
#include <set>
int main()
{
std::set<int> mySet;
mySet.insert(1);
mySet.insert(2);
mySet.insert(3);
mySet.insert(4);
std::set<int>::const_iterator found = std::lower_bound(mySet.begin(), mySet.end(), 2);
if (found != mySet.end())
std::cout << "Value 2 was found at position " << (found - mySet.begin()) << std::endl;
else
std::cout << "Value 2 was not found" << std::endl;
}
這並不編譯:
16:63: error: no match for 'operator-' (operand types are 'std::set<int>::const_iterator {aka std::_Rb_tree_const_iterator<int>}' and 'std::set<int>::iterator {aka std::_Rb_tree_const_iterator<int>}')
16:63: note: candidates are:
In file included from /usr/include/c++/4.9/vector:65:0,
from /usr/include/c++/4.9/bits/random.h:34,
from /usr/include/c++/4.9/random:49,
from /usr/include/c++/4.9/bits/stl_algo.h:66,
from /usr/include/c++/4.9/algorithm:62,
from 3:
使用的std ::矢量STD代替的::套作品perfectly。
看起來像operator-不適用於std::set::iterator
。爲什麼? 然後,你怎麼可以很容易地(沒有打電話std::previous
或std::next
直到達到...這不會有效)找到一個給定的迭代器在容器中的位置?如果你不能,那麼我可以用什麼修飾來找到給定元素的索引......?
請忘記帶有set/map迭代器的'std :: lower_bound',它是o(n)。改用'set.lower_bound'。 – sbabbi