I am using multisets (sets would be the same), and have them as arguments to a bunch of functions. My functions looked like this:

```
void insert(const int val, multiset<int>& low, multiset<int>& high)

```

Then I found out I needed a custom comparison function for one of the multisets. I did it declaring a `struct` and overriding the () operator.

My multiset definition that once was: `multiset<int> low` now is `multiset<int, order> low`.

The problem with this is that I'm actually changing the type of `low`, and thus I need to change it in every single parameter, which greatly reduces the generality of my functions (the functions do not need to know the comparison method of the multiset).

Moreover, `order` is one comparison function, which is different from any other comparison functions I might ever declare (even though the types it compare are the exact same).
What I mean is that `multiset<int, order1> != multiset<int, order2>`, which is very bad.

So, my question is, how can I not have this problem? How can I declare functions that accept multisets (or sets) regardless of their comparison function?