c ++ multiset迭代器排序

时间:2013-01-28 14:58:48

标签: c++ sorting iterator multiset

我有一个多集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

1 个答案:

答案 0 :(得分:0)

您可以(或者,如果可以,根据您的STL实施,不应该)修改项目一旦被插入multiset,因为它可能违反{{1中的项目的提供顺序}}。因此,即使你能做到这一点,交换也是一个坏主意。

请参阅https://stackoverflow.com/a/2038534/713961http://www.cplusplus.com/reference/set/multiset/

如果要删除项目,请使用带有迭代器的multiset::erase。我相信在多集中“修改”项目的标准做法是删除它,然后插入修改后的版本。

作为旁注,我注意到你通过使用固定的epsilon(0.001)来检查两个浮点数是否足够接近。正如this article中所解释的,只有在您比较的所有浮点数都足够小时,这才有效。请参阅文章以获得对大小浮点值同样有效的比较。