我可以以某种方式使用自己的函数在多图中对对进行排序吗?我有三个类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;
}
我不确定如何执行此操作,甚至不确定。
最佳答案
从 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()) {}
关于c++ - C++:对象键的 multimap 自定义比较器,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55553920/