我正在尝试实施有序的多地图。 但我需要提供一个函数来比较multimap包含的内容。
例如:
bool compare(string a, string b) { return a<b; }
bool compare2(string a, string b) { return a.size()<b.size(); }
class MultiMap
{
private:
toCompare( string a, string b);
public:
MultiMap(function) { toCompare = function };
}
所以我想通过给定的函数在multimap中设置顺序。
有没有办法,也许有一些指向函数的指针。 希望你明白我想做什么,如果不随意问。
另外,请注意这不是真正的代码,只是我写的一个想法。
答案 0 :(得分:2)
最简单的方法是使用std::function
,例如:
class MultiMap
{
private:
std::function<bool(string,string)> toCompare;
public:
MultiMap(std::function<bool(string,string)> function) : toCompare(std::move(function)) {}
bool compare(string a, string b) {
return toCompare(a,b);
}
};
int main(int argc, char** argv) {
MultiMap mm(compare);
mm.compare("asd", "Da");
}
或者使用函数指针:
// Define function type
using compare_func = bool(string,string);
class MultiMap
{
private:
compare_func* toCompare;
public:
// Constructor accepts pointer to functiontype
MultiMap(compare_func* function) : toCompare(function) { }
bool compare(string a, string b) {
return toCompare(a,b);
}
};
int main(int argc, char** argv) {
MultiMap mm(compare);
mm.compare("asd", "Da");
}