A general rule of thumb is that a company is going to pay the minimum they have to in order to meet the business needs that a role fulfils and it's wholly up to the employee to negotiate the best rate they can get for undertaking that role.
Keeping the variables simple for now, if company is recruiting for a role and they have two candidates - [Person A] is only willing to do that role for $20 an hour and [Person B] will do thwe same job to an equivilent standard for $15 an hour then they have every reason in the world to hire Person B at $15 an hour and pocket the "saving". Now if six months later they need another employee doing the same job but this time when recruiting they have [Person C] who wants $20 per hour and [Person D] who wants $22 an hour then they are going to hire [Person C]. This is how you end up with two people (B and C) doing the same job but for different money.
This doesn't mean that C is any better than B, and heck they might even be worse - this might not seem "fair" but the reality is that "fairness" doesn't really come in to this and it's a mistake to think in those terms - the company has acted in a perfectly reasonable way to meet their business needs.
Obviously in the above example you are essentially [Person B] and Charlie is [Person C], and the fact is that for whatever reasons (neogiating skill, lack of availability of other cheaper candidates at the time etc) Charlie got a higher rate. If you want to get the same rate as Charlie you are going to have to convince the company that it is in their intersts to pay you that amount, the mere fact that Charlie is paid more than you is not enough in of itself to justify you arguing for a raise to match so that line of approach is a flat out dead end. So you really need to forget about Charlie, he's not relevent here, it's all between you and your employer.
Instead the only real way to convince them to pay you more is make a case that it will cost them more (either directly or indirectly) not to pay you the extra money. the obvious example of this is you threaten or imply that you will leave. If the job market for your skills is such that they would struggle to hire someone for less than what you are asking for (and they would have to factor in costs of recruitment, training, lost productivity while someone else gets up to speed etc etc) then you've got a good case. If there are a glut of good candidates out there right now who will do the role for what you're currently earning then you're going to struggle. So do your research on what people doing your role in your locale are typically being paid and see if the numbers are in your favor.
Alternatively, if there are any areas where you provide added value over another typical candidate for your role then you can play on these, stress what you as a particular individual bring to the company that another won't.
You can probably work out from the above that the only real leverage you have is the idea that you will leave if they don't pay you more, so you need to be prepared that if you don't get what you want you'll need to be willing to follow through. If any of this "added value" things I mentioned above take the form of things you do voluntarily over and above your contracted duties then you could imply a withdrawal of those as a softer form of leverage but it may well not be as effective.