排序不适用于大文件

时间:2015-12-30 17:27:25

标签: c++ while-loop

这是背景:

  

三百万名男子名字端对端,从纽约到加利福尼亚。每个参与者都得到了一张纸,上面写下了他自己的名字以及他身边的人的名字。线路最西端的那个人不明白该怎么办,所以他扔掉了他的纸;剩余的2,999,999张纸放在一个巨大的篮子里,然后送到华盛顿特区的国家档案馆。这里篮子的内容被彻底洗牌并转移到磁带上。

我正在做导师提供的天真解决方案,随机找到Xc,然后在unordered_map中使用它搜索,如果它有Xc作为关键字,获取该关键字的值,nameMap1(shows below)的西部名称,或nameMap2搜索的东部名称,直到找不到西风名称或东风名称。

根据这个,我有以下代码。

unique_ptr<string> temXc;

nameList1.push_back(*westName);

temXc.reset(new string);

temXc = move(westName);

bool isRunning = true;

while (isRunning==true)
{
    unordered_map<string, string>::const_iterator gotWest = nameMap1.find(*temXc);

    if (gotWest == nameMap1.end())
    {
        nameMap1.clear();
        isRunning = false;
    }
    else
    {
        temWN.reset(new string);
        *temWN = gotWest->second;

        nameList1.push_back(*temWN);
        nameMap1.erase(*temXc);

        temXc.reset(new string);
        temXc = move(temWN);
    }
}

while循环应该帮助我找到最西部的名字,但它没有。

例如正如背景所说,名称应该如下所示:

  • E,F
  • A,B
  • B,C
  • C,d
  • d,E

名字应该是东部名字,另一个是西部名字。

如果我随机选择b作为Xc,则此while循环可以给出b, c, d, e, f列表,该列表工作正常,但如果我更改为3M.txt哪个有3M名字,它不工作,答案确实给我一个列表,但在我检查3M.txt文件后,我发现姓氏仍然有一个西风的邻居,并且是列表的第一个名称(即{ {1}})。

0 个答案:

没有答案