在c++中隐藏不同的std::map比较参数

Hide different std::map compare parameters in c++

本文关键字:std map 比较 参数 c++ 隐藏      更新时间:2023-10-16

我有一个类看起来像这样:

template<typename comparer>
class MyClass {
std::map<std::uint32_t, MyElementType, comparer> entries;
public:
void doSomething(std::uint32_t key, const MyElementType& el) {
...
}
};

我想在MyClass以一种对特定比较器不可知的方式专门化了不同的比较器之后使用它。最优雅的方式是什么?

使用std::function作为比较器。

using MyMap = std::map<std::uint32_t, int, std::function<bool(std::uint32_t, std::uint32_t)>>;
MyMap entries1{[](std::uint32_t a, std::uint32_t b){ return a < b; }};
MyMap entries2{[](std::uint32_t a, std::uint32_t b){ return a > b; }};