首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C++排序算法

C++排序算法
EN

Stack Overflow用户
提问于 2013-01-29 01:49:03
回答 2查看 534关注 0票数 2

谢谢你提前看了这个问题。

我正试图订购下列物品清单:

代码语言:javascript
复制
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

按以下顺序排列:

代码语言:javascript
复制
Bpgvjdfj
Bvfbyfzc
Qkignteu
Wgqtalnh
Coyuhnbx
Zjmvxouu
Fsmotsaa
Zexyegma
Zvjxfwkx
Sgtgyldw
Fwhbryyz
Byoifnrp
Czeagvnj
Uysmwjdb
Wzujllbk
Oljgjisa
Dffkuztu

这是通过以下方式完成的:

  1. 取第一对,把名字放进一个列表
  2. 使用该对的第二个名称,找到它用作第一个名称的对。
  3. 将该对的第二个名称添加到列表中
  4. 重复2和3

我正在用两对填充一个unordered_map,然后对每个名称进行排序并将其添加到列表中。在以下代码中可以看到这一点:

代码语言:javascript
复制
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“是否正确,因为我只插入了第一个值。

我的问题是,有人能给我一些洞察力,我如何才能做到这一点?因为我不确定最好的方法,也不确定我的想法是否正确。任何洞察力都将不胜感激。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-01-29 02:07:29

你的计划只有一个弱点。你得先找到连锁店的第一个人,纽约先生。

您的算法假设这一行从第一个人开始。要做到这一点,您首先应该扫描整个映射,以找到,这是一个没有作为第二个元素出现的名称。那是纽约先生,你可以从那里出发。push_back是您需要在这里使用的。

票数 2
EN

Stack Overflow用户

发布于 2013-01-29 03:06:12

  1. 创建一个数据结构来存储一个链,它的前面和后面。以'back‘作为键存储在哈希表中。
  2. 创建一组单元素链(每个元素一条)
  3. 迭代地,选择一个链,在哈希表中找到它的“前端”(即找到另一个具有与‘back’相同元素的链)并将它们合并。
  4. 这样做,直到你只剩下一条链
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14574394

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档