0

我有一个 multiset 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
4

1 回答 1

0

您不能(或者如果可以,取决于您的 STL 实现,不应该)在将项目插入到 中后对其进行修改multiset,因为这可能会违反multiset. 所以交换将是一个坏主意,即使你能做到。

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

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

作为旁注,我注意到您正在使用固定的 epsilon (0.001) 检查两个浮点数的值是否足够接近。正如本文中所解释的,这仅在您比较的所有浮点数都足够小的情况下才有效。请参阅这篇文章,了解对大浮点值和小浮点值同样适用的比较。

于 2013-01-28T15:14:53.937 回答