void BinarySearchTree::inorder(tree_node* p)
    if(p != NULL)
        if(p->left) inorder(p->left);
        cout<<" "<<p->data<<" ";
        if(p->right) inorder(p->right);
    else return;

This sample of code works fine if I use it to test valuables that are primitive, example: integer
I wanted to be able to transform that, so, if for example when I was using a class 'Product', which includes a Price (integer) and Description(string), would allow me to order the products per price.

If you could give me an idea how to make this possible I'd appreciate it.