On Oct 3, 9:56 pm, "Victor Bazarov" <v.Abaza...@comAcast.net> wrote:
Renzr 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;
There is no operator - defined for it, that's what the compiler is
telling you. If you need to know how far it's from the start (though
I am not sure why you need that), use 'std::distance' function.
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&)
V
--
Please remove capital 'A's when replying by e-mail
I do not respond to top-posted replies, please don't ask
Thanks for your solution.
The resean is in my FEM code, I want to get the local position of DOF
in the ith row.
So i design the std::vector<std::set<unsigned int> >.
Maybe std::vector<std::vector<unsigned int> > is prefered.
In my loop to ith row (std::vector[i]), several "unsigned int" will be
added into std::vector[i].
And i need the sorted "unsigned int" in std::vector[i]. So, I have two
ways.
The first is to design the std::vector[i] as std::vector<unsigned
int>. But this way we should involve in std::sort() on
std::vector<unsigned int>. The second way is to design the
std::vector[i] as std::set<unsigned int>.
and then sort it that it is to insert them into the set. For large
number of elements the difference can be quite noticeable.