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;
         }
   }
}