我定义了一个类,该类维护对其他数据结构的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/