【发布时间】:2013-01-12 12:30:17
【问题描述】:
感谢您提前查看此问题。
我正在尝试订购以下物品清单:
Bpgvjdfj,Bvfbyfzc
Zjmvxouu,Fsmotsaa
Xocbwmnd,Fcdlnmhb
Fsmotsaa,Zexyegma
Bvfbyfzc,Qkignteu
Uysmwjdb,Wzujllbk
Fwhbryyz,Byoifnrp
Klqljfrk,Bpgvjdfj
Qkignteu,Wgqtalnh
Wgqtalnh,Coyuhnbx
Sgtgyldw,Fwhbryyz
Coyuhnbx,Zjmvxouu
Zvjxfwkx,Sgtgyldw
Czeagvnj,Uysmwjdb
Oljgjisa,Dffkuztu
Zexyegma,Zvjxfwkx
Fcdlnmhb,Klqljfrk
Wzujllbk,Oljgjisa
Byoifnrp,Czeagvnj
按以下顺序排列:
Bpgvjdfj
Bvfbyfzc
Qkignteu
Wgqtalnh
Coyuhnbx
Zjmvxouu
Fsmotsaa
Zexyegma
Zvjxfwkx
Sgtgyldw
Fwhbryyz
Byoifnrp
Czeagvnj
Uysmwjdb
Wzujllbk
Oljgjisa
Dffkuztu
这是由以下人员完成的:
- 取出第一对并将名称放入列表中
- 使用对的第二个名称,找到用作第一个名称的对
- 将该对的第二个名称添加到列表中
- 重复 2 & 3
我正在使用这些对填充 unordered_map,然后对每个名称进行排序并将其添加到列表中。这可以在以下代码中看到:
westIter = westMap.begin();
std::string westCurrent = westIter->second;
westList.push_front(westCurrent);
for(int i = 0; i < 30; i++)
{
if(westMap.find(westCurrent) != westMap.end())
{
//find pair in map where first iterator is equal to "westCurrent"
//append second iterator of pair to list
}
westIter++;
}
注意:目前我不确定“push_front”是否正确,因为我只插入了第一个值。
我的问题是有人能给我一些关于如何解决这个问题的见解吗?因为我不确定最好的方法以及我的想法是否正确。任何见解将不胜感激。
【问题讨论】:
-
从纽约到加利福尼亚的三百万名不同名字的男子首尾相连。每个参与者都得到一张纸条,他在纸条上写下自己的名字和排在他西边的人的名字。队伍最西端的那个人不知道该怎么办,所以他把报纸扔了。剩下的 2,999,999 张纸条被放入一个巨大的篮子中,并被带到华盛顿特区的国家档案馆。篮子里的东西在这里被完全打乱并转移到磁带上。 unordered_map 正在洗牌。
-
您是否要对
unordered_map进行排序??? -
是否需要重新生成 2,999,999 个名称的顺序?排序是一个坏名字,但我想我理解
-
关于标签:为什么是“knuth”?
-
IMO,认为这是排序是错误的。您真正拥有的是“关系链表”——即链表,但不是每个节点都包含指向下一个节点的指针,而是指针字段包含下一个节点的值。或者,您可以将其视为(某种)拓扑排序。
标签: c++ algorithm sorting unordered-map knuth