谁能帮我提高此功能的效率

时间:2019-02-23 21:28:38

标签: c++ unordered-map

因此,我试图通过unordered_map容器进行排序。容器从文件列表中读取输入,文件是人员列表。文件中的每一行都将像rCB, bIA一样,并将其作为元素存储在地图中。每个元素中的第二个字符串都充当指向列表中下一个人的指针,因此稍后它将再次出现在新行中,在这种情况下为bIA,TDV

到目前为止,我可以通过创建unordered_map迭代器并使用find函数中的第二个字符串让迭代器转到下一个元素来按顺序进行排序。我的问题是反方向。我能够以相反的方式进行排序,但是我实施解决方案的方式意味着最终的排序需要很长时间,因为我们有300万人的输入文件。

list<string> SortEast(unordered_map<string, string> &TempUMap, unordered_map<string, string>::iterator IT, list<string> &TempList)
{
    IT = TempUMap.begin();
    while (TempList.size() != (TempUMap.size() + 1))
    {
        if (IT->second == TempList.front())
        {
            TempList.emplace_front(IT->first);
            IT = TempUMap.begin();
        }
        IT++;
    }
    return TempList;
}

我试图提高效率,但我想不出办法。如果我能找到列表开头的值,就可以从该值开始按顺序排序,但是我也不知道如何轻易找到该值。

任何帮助将不胜感激。

编辑: 我们其中一项输入的示例是:

rBC,biA vnN,CmR CmR,gnz Dgu,OWn lnh,Dgu OWn,YMO YMO,SIZ XbL,Cjj TDV,jew iVk,vnN wTb,rBC jew,sbE sbE,iVk Cjj,wTb AGn,XbL gnz,SMz biA,TDV SIZ,uvD SMz,lnh

这只有20个人。在这种情况下,AGn是第一个值,uvD是最后的值。我最终得到的输出是:

AGn XbL Cjj wTb rBC biA TDV jew sbE iVk vnN CmR gnz SMz lnh Dgu OWn YMO SIZ uvD

此文件以rBC开头,这是我需要向后排序的地方

1 个答案:

答案 0 :(得分:0)

您不能简单地做这样的事情吗?

@Dao
public interface RawDao {
    @RawQuery()
    boolean insertRecords(SupportSQLiteQuery query);

在手机上键入此信息时,我可能错过了一些详细信息。如果担心过多的副本飞来飞去,可以添加一些指针和/或std :: moves。

我想它与您的解决方案相同,但是没有笨拙的列表和emplace_front。