【发布时间】:2014-11-04 18:15:58
【问题描述】:
我正在尝试重载我编写的类的大于运算符(类似于我面临的真实案例)以对类成员映射进行排序。
在这里,我用我的代码制作了一个 tar 球:
http://s000.tinyupload.com/?file_id=81335448529630428273
在MapSorting 类中有
std::map<std::string, std::vector<Electrons> > m_mymap;
我有兴趣使用 Electron::pt() 成员函数对地图进行降序排序,如果我这样做了
std::vector<Electrons> veto_electrons = m_mymap["Veto"];
那么veto_electrons[0] 总是pt 最高的电子。
我可能会编写一个仿函数来完成这项工作,但主要是作为练习,我想尽可能重载operator <。
如果真正的程序员对我的代码有一些反馈,我也很高兴,我不是专业人士,但我喜欢并喜欢编程!
【问题讨论】:
-
std::map<std::string, boost::flat_set<Electrons>> -
顺便说一句,在 tarball 中提供代码非常不方便。使用 ideone.com 或其他允许我们查看和测试它的平台,而无需从互联网上的陌生人那里下载随机文件。
-
没有下载任何 tarball 听起来你正在尝试使用错误的工具来完成这项工作。
std::map仅在插入时调用operator <。当重载operator <时,你需要提供一个一致的实现,即如果ab在时间t,那么a必须是b在时间t + n。 -
我的恶意代码传播计划失败了!顺便说一句,我不知道 ideone.com,谢谢,下次我会使用它!感谢安德烈亚斯的解释,我现在明白了。我可以简单地在将矢量插入地图之前对其进行排序,我想这是最简单的方法!
标签: c++