我正在使用多重集(集合是相同的),并将它们作为一堆函数的参数。我的函数如下所示:
void insert(const int val, multiset<int>& low, multiset<int>& high)
然后我发现我需要为其中一个多重集提供一个自定义比较函数。我这样做是声明 struct
并覆盖 () 运算符。
我的多重集定义曾经是:multiset<int> low
现在是multiset<int, order> low
.
问题是我实际上正在更改 low
的类型,因此我需要在每个参数中更改它,这大大降低了我的函数的通用性(函数不需要知道多重集的比较方法)。
此外,order
是一个比较函数,它与我可能声明的任何其他比较函数不同(即使它比较的类型完全相同)。
我的意思是multiset<int, order1> != multiset<int, order2>
,这是非常糟糕的。
所以,我的问题是,怎样才能不出现这个问题呢?如何声明接受多重集(或集合)的函数,无论其比较函数如何?
最佳答案
您可以使用函数模板:
template <typename M1, typename M2>
void insert(const int val, M1& low, M2& high);
如果您想将自己限制为std::multiset<int, X>
,则还有另一个选择,就是使用template模板参数。
关于c++ - 设置自定义比较类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15120083/