0

我的问题在很多方面类似于这个问题:通过一个函数传递一个自定义比较器,但我尝试了那里提出的解决方案,但无法让它工作。

简而言之,我有一个方法可以保留几个排序结构并执行多个比较,总是在类型元素上int都使用相同的 ordering调用方法时确定排序。

预期调用看起来像:myFunction(std::greater<int>());

首先,我尝试将函数声明为:void myFunction(binary_operator<int, int, bool> order);但是,根据这个解释binary_function它不适合在函数调用中充当基类。

最后,我尝试了来自的建议这个答案(以及许多其他网站)的建议,建议使用 templates。但是,我仍然无法编译我的代码。

最小的非工作示例:

template <typename Comparator> 
void myFunction(Comparator order){

  if (order(1,2)){
      // some stuff
      // COMPILES OK
  }

  std::vector <int> vecToSort;
  // ... initialize
  std::sort(vecToSort.begin(), vecToSort.end(), order); // works
  // COMPILES OK

  std::multimap <int, int, order > boundary;
  // STARTS KICKING, SCREAMING AND SHOUTHING
}

和我得到的编译错误:

错误:“模板类 std::multimap”的模板参数列表中参数 3 的类型/值不匹配错误:预期类型,得到“订单”</p>

我认为同样的技巧应该适用于两者。它不是。(编辑:我现在可以看到type/object问题)

有人可以解释一下这里发生了什么以及如何 使用作为函数参数传递的排序吗?multimap

PS:我没有在这个项目中使用 boost。

4

2 回答 2

2

应声明如下:

std::multimap <int, int, Comparator> boundary(order);
                         ^^^^^^^^^^

正如评论所说,您需要提供一个typenot an object这些Construct multimap的文档提供了一些示例。

于 2013-05-02T16:19:41.700 回答
2

以这种形式使用Comparator和:order

std::multimap <int, int, Comparator> boundary (order);

首先将比较类型传入内部<>,然后在构造函数中传递比较对象。

于 2013-05-02T16:22:00.677 回答