Beh no, il punto e' proprio questo. Ho bisogno di accedervi in maniera non sequenziale (questo e' solo un esempietto, il codice e' piu' complesso)
codice:
#include <map>
#include <utility>
#include <vector>
#include <iostream>
using namespace std;
typedef struct
{
double x;
double y;
} point;
typedef pair<point *, point*> pairPointPtr;
class pointPtrLessThen
{
public:
bool operator( )(const pairPointPtr& p1, const pairPointPtr& p2) const
{
if (p1.first->x < p2.first->x)
return true;
else
{
if (p1.first->x == p2.first->x)
{
if (p1.second->x < p2.second->x)
return true;
else return false;
}
else return false;
}
}
};
typedef map<pairPointPtr, double, pointPtrLessThen> pairPointPtrMap;
//
int main ()
{
unsigned int dim = 10;
point * myPoints = new point[dim];
for (unsigned int i = 0; i < dim; i++)
{
point tempPoint;
tempPoint.x = double (i);
tempPoint.y = double (i+1);
// assegno valore
*(myPoints + i) = tempPoint;
}
pairPointPtrMap distance;
for (int i = 0; i < dim; i++)
{
for (int j = 0; j < dim; j++)
if (i != j)
{
double val = (myPoints +i)->x + (myPoints +i)->y + (myPoints+j)->x + (myPoints+j)->y;
cout << " val is " << val << endl;
pairPointPtr tempPointPtr = make_pair (myPoints+i, myPoints+j);
distance[tempPointPtr] = val;
cout << "count value is" << distance.count(tempPointPtr) << endl; // why it does not find the key?
if (distance.count(tempPointPtr) != 0)
cout << (*(distance.find(tempPointPtr))).second << endl;
}
}
}