c++ - 设置自定义比较类型

标签 c++ stl

我正在使用多重集(集合是相同的),并将它们作为一堆函数的参数。我的函数如下所示:

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/

相关文章:

c++ - 如何在Flex中读取标识符 'class'?

c++ - std::map 中的线程安全

c++ - 取消引用临时 std::shared_ptr 是否安全?

c++ - 在不同的无限循环上同步 Qthreads (QTimerEvent)

java - 如何使用 SWIG 返回指向用户定义类对象的指针

c++ - Radix/Patricia Trie 的 STYLish 下界函数

c++ - 如何实现 vector 重新分配?

c++ - 在循环外计算 map.end() 的优势

c++ - 从莫顿有序点构建平行四叉树

c++ - nm 未知命令行参数 '-C'?