我定义了一个类,该类维护对其他数据结构的double映射的排序映射。根据用例,我希望其他对象按升序或降序排列。

struct Book {
  std::map<double, Level> levels;

  // More complexity ...

  void process(Tick &t);

  const unsigned amount;

  // More stuf ...

  Book(const unsigned amount) :  levels(), id_price() {}

};

理想情况下,应在Book的构造函数中指定它。例如,我可以传递std::less<double>(),但这将无法正常工作,因为我无法使用变量来声明 map levels,对吧?它可以与模板一起使用吗?我不想使它成为泛型。应该加倍,以免增加不必要的复杂性。有想法吗?

最佳答案

您可以定义 map 以使用自定义比较器

struct Compare
{
    bool operator()(double l, double r) const {
        return cmp(l, r);
    }

    std::function<bool(double, double)> cmp;
};

然后,将您的 map 定义如下:
std::map<double, Level, Compare> levels;

和构造函数
template<typename T>
Book(T comparator) :  levels(Compare{comparator}) {}

然后,您可以使用任何想要的比较器来初始化 map
Book a(std::less<>{});

如果您不需要std::function的开销,则可以在比较器中实现更严格的逻辑。

关于c++ - 数据结构取决于比较器,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39811806/

10-11 20:22