【发布时间】:2013-01-11 22:50:07
【问题描述】:
我有一个多重集mymulti,我根据班级成员m_a 进行排序。
然后我想检查所有已排序的元素,如果 m_a 的相邻字段 mymulti 的差异小于我给定的阈值,例如 0.001。如果是这样,那么我想更喜欢另一个类成员 m_b 较小的那个。
我被卡住了,我没有使用多重集或迭代器的经验。我不知道如何比较两次迭代的迭代器。如果您能为我提供正确的代码,我将不胜感激! 我的尝试,不是太多,只是我的概念:
//all before I got stuck
for(it = mymulti.begin(); it!= mymulti.end(); ++it) //or it++?
if( (it+1)->mymulti.m_a - (it)->mymulti.m_a < 0.001)
if ((it+1)->mymulti.m_b < (it)->mymulti.m_b)
//swap them. but how to swap two fields in a multiset, not two multisets?
// otherwise do nothing
【问题讨论】:
-
不要将浮点变量作为集合的键...
-
我没有别的选择,为什么我不应该,因为计算时间?无论如何它已经在工作了,我只想在里面添加这个“内秒”排序..
-
@eReM 因为浮点数是近似值,直接比较时不能可靠地相互相等。例如,
0.1 * 10.0、1.0和0.1 + 0.1 + 0.1 ...可能都等于不同的值。见altdevblogaday.com/2012/02/22/… -
另外,如果你用相距 0.001(从 0 到 1000)的元素填充你的集合怎么办。这是否意味着 0 和 1000 相同?
-
@Kerrek SB 我稍后不得不依赖这里的可能性,算法并不重要,不过感谢这个提示。所以可以说我只想检查前两个元素。如何正确地做?
标签: c++ sorting iterator multiset