On Jun 24, 7:01*am, "arkandor" <arkando...@poczta.onet.pl> wrote:
> Hello,
>
> I have following code. I wrote it in Borland C++ Builder 5.0.
>
> #include <map>
> #include <iostream>
>
> using namespace std;
>
> struct TVec
> *{
> * *double x, y, z;
> * *bool operator !=(const TVec& v2) const
> * *{ return ((fabs(x-v2.x)>1e-12) || (fabs(y-v2.y)>1e-12) ||
> (fabs(z-v2.z)>1e-12));}
> *};
>
> typedef map<TVec, int, not_equal_to<TVec> > TMap;
>
> int main()
> {
> *TMap m;
> *TMap::iterator iter;
>
> *TVec v;
>
> *v.x=3.1; v.y=2.3; v.z=4.1;
> *m[v] = 32;
> *v.x=-3.1; v.y=2.3; v.z=4.1;
> *m[v]=45;
> *v.x=-3.25; v.y=2.3; v.z=4.1;
> *m[v] = 55;
>
> *cout<<"size = "<<m.size()<<endl;
>
> *v.x=3.1; v.y=2.3; v.z=4.1;
> *iter = m.find(v);
> *if (iter != m.end())
> * cout<<iter->second<<endl;
>
> *v.x=-3.1; v.y=2.3; v.z=4.1;
> *iter = m.find(v);
> *if (iter != m.end())
> * cout<<iter->second<<endl;
>
> *v.x=-3.25; v.y=2.3; v.z=4.1;
> *iter = m.find(v);
> *if (iter != m.end())
> * cout<<iter->second<<endl;
>
> *system("pause");
> *return 0;
>
> }
>
> After compilation we have on the screen :
> size=3
> 32
> 45
>
> However third element exsists in the map it isn't found by m.find(TVec)
> (!!!)
> I would be grateful for any suggestions.
> Best regards, arkandor
So you use the not_equal_to<TVec> as the less_than compare for the
std::map, right?
which means whenever you have v1<v2, you also have v2<v1, where "<" is
what your map uses as a less_than compare ...
It doesn't suprise me all that you got non-sense result, because your
less_than compare doesn't make much sense.
|