我可以以某种方式使用自己的函数对多图中的对进行排序吗?我有三个类CTimeStamp,CMail和CMailLog。事情在我有的CMailLog中
我之所以使用multimap<CTimeStamp, CMail>
是因为为此任务,我需要一个解决方案,该解决方案对于大量数据将非常快,因此,在插入此多图时,我将需要使用CTimeStamp中的Compare方法。这些类看起来像这样。
class CTimeStamp {
public:
int compare (const CTimeStamp &x) const;
...
}
class CMail {
...
}
class CMailLog {
public:
...
private:
multimap<CTimeStamp, CMail> logs;
}
我不确定如何执行此操作,甚至不确定。
答案 0 :(得分:3)
在插入此多图时,我需要以某种方式使用
CTimeStamp
中的Compare方法
从std::multimap
documentation开始,您需要做的只是
为std::less<CTimeStamp>
namespace std {
bool less<CTimeStamp>(const CTimeStamp& a, const CTimeStamp& b) {
return a.compare(b) < 0;
}
}
或
在构造函数中提供自定义比较器:
CMailLog() :
logs([](const CTimeStamp& a, const CTimeStamp& b) { return a.compare(b) < 0; })
{}
在上一个示例中,我对构造函数使用了 lambda表达式,因为我认为这是最短,最容易理解的形式。
实际上,签名为bool (const CTimeStamp&,const CTimeStamp&)
的 任何可呼叫对象 都是合适的。
您可能还会编写一个简单的全局函数
bool foo(const CTimeStamp& a,const CTimeStamp& b) {
return a.compare(b) < 0;
}
或适当的可调用类型
struct foo {
bool operator()(const CTimeStamp& a,const CTimeStamp& b) {
return a.compare(b) < 0;
}
};
并通过
multimap<CTimeStamp, CMail> logs;
在构造函数初始值设定项列表中:
CMailLog() : logs(foo) {}
可调用结构版本
CMailLog() : logs(foo()) {}