The problem here is that there is no operator- for the iterator.
Take a look at the distance algorithm.
On Oct 3, 2:52 pm, Renzr <renzhengy...@gmail.com> wrote:
> I have a problem about the std::set<>iterator. After finding a term in
> the std::set<>, i want to know the distance from
> the current term to the begin(). But i have got a error. Please offer
> me help, thank you. I am a freshman about the STL. The following is
> the code.
> #include <set>
> #include <iostream>
> #include <vector>
> int main()
> {
> std::set<unsigned int> a;
> a.insert(1); a.insert(2); a.insert(3); a.insert(4); a.insert(5);
> std::set<unsigned int> b;
> b.insert(6); b.insert(7); b.insert(8); b.insert(9); b.insert(10);
> std::vector<std::set<unsigned int> > ab(2);
> ab[0]= a; ab[1]=b;
> {
> const unsigned int i=0, j=5;
> std::set<unsigned int>::iterator it=ab[i].find(5);
> if(it!=ab[i].end()) std::cout<<it-ab[i].begin()<<std::endl;
> else { std::cout<"There is no:"<<j<<" in "<<i<<std::endl;
> }
> }
> return 0;
>
> }
>
> This is the error:
> error: no match for 'operator-' in 'it - (+(&ab)->std::vector<_Tp,
> _Alloc>::operator[] [with _Tp = std::set<unsigned int,
> std::less<unsigned int>, std::allocator<unsigned int> >, _Alloc =
> std::allocator<std::set<unsigned int, std::less<unsigned int>,
> std::allocator<unsigned int> > >](0u))->std::set<_Key, _Compare,
> _Alloc>::begin [with _Key = unsigned int, _Compare =
> std::less<unsigned int>, _Alloc = std::allocator<unsigned int>]()'
> /usr/lib/gcc/i386-redhat-linux/3.4.2/../../../../include/c++ /3.4.2/
> bits/stl_bvector.h:180: note: candidates are: ptrdiff_t std::operator-
> (const std::_Bit_iterator_base&, const std::_Bit_iterator_base&)