我有一个多集mymult
i,我根据班级成员m_a
进行排序。
我希望检查所有已排序的元素,如果m_a
的邻居字段mymulti
的差异小于我的给定阈值,例如0.001。如果是这样,那么我想更喜欢具有较小的另一个类成员m_b的那个。
我遇到困难,我没有使用multiset或迭代器的经验。我不知道如何比较两次迭代的迭代器。如果您能为我提供正确的代码,我将非常感激! 我的尝试,而不是太多,只是我的概念:
//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
答案 0 :(得分:0)
您可以(或者,如果可以,根据您的STL实施,不应该)修改项目一旦被插入multiset
,因为它可能违反{{1中的项目的提供顺序}}。因此,即使你能做到这一点,交换也是一个坏主意。
请参阅https://stackoverflow.com/a/2038534/713961和http://www.cplusplus.com/reference/set/multiset/
如果要删除项目,请使用带有迭代器的multiset::erase
。我相信在多集中“修改”项目的标准做法是删除它,然后插入修改后的版本。
作为旁注,我注意到你通过使用固定的epsilon(0.001)来检查两个浮点数是否足够接近。正如this article中所解释的,只有在您比较的所有浮点数都足够小时,这才有效。请参阅文章以获得对大小浮点值同样有效的比较。