对C ++对进行排序

时间:2018-01-22 16:55:22

标签: c++ list sorting deque

我正在构建一个系统,该系统应该在两个字符串对中列出,并将它们排序为正确的顺序。在列表中显示:

E,F

C,d

B,C

A,B

d,E

,输出应该是 A,B,C,d,E,F

系统会以随机字母开头,然后遍历列表并使用该字母获取正确的下一个字母。因此,如果给定C,它指向D指向E.然后在它之后它返回到C并使用它来找到之前的字母。然后我将它添加到双端队列中。我怀疑在第二循环中某些地方出了问题,这意味着我只会收到信件之后但不是之前的信息。但是,如果我给它E开始它就会很好并且可以获得前后的所有内容。

void mm::sort(std::string startName)
{

std::list<std::pair<std::string, std::string>>::const_iterator iterator;

std::string base = startName;
int i = 0;

for (iterator = men.begin(); iterator != men.end(); iterator++)
{

    if ((*iterator).first == base)
    {
        output.push_back(base);
        base = (*iterator).second;

        iterator = men.begin();
        i++;
    }
}

base = output[0];

for (iterator = men.begin(); iterator != men.end(); iterator++)
{

    if ((*iterator).second == base)
    {
        output.push_front(base);
        base = (*iterator).first;

        iterator = men.begin(); 
        i++;
    }
}

}

2 个答案:

答案 0 :(得分:0)

  1. /bundles展平为list<pair<string, string>>
  2. list<string>
  3. 进行排序
  4. 从排序列表中删除重复项。

答案 1 :(得分:0)

有更简单有效的方法可以做到这一点。既然你坚持并要求在程序中找到错误,我就为你解决了。

我认为没有周期。将此与您的排序功能进行比较,并了解我移动的原因

  

迭代++

这是你错过的唯一主要内容。

见下文。

#include<iostream>
#include<list>
#include<utility>
#include<string>

std::list<std::pair<std::string, std::string>> men;
std::list<std::string> output;

void sort(std::string startName)
{

std::list<std::pair<std::string, std::string>>::const_iterator iterator;

std::string base = startName;

for (iterator = men.begin(); iterator != men.end(); )
{

    if ((*iterator).first == base)
    {
        output.push_back(base);
        base = (*iterator).second;
        iterator = men.begin();
    }
    else {
        iterator++;
    }
}
output.push_back(base);   // Another line you missed.(for last element)

base = output.front();

for (iterator = men.begin(); iterator != men.end(); )
{

    if ((*iterator).second == base)
    {
        output.push_front((*iterator).first);
        base = (*iterator).first;

        iterator = men.begin();
    }
    else
        iterator++;
}

}


int main() {
men.push_front(std::make_pair("Five", "Six"));
men.push_front(std::make_pair("One", "Two"));
men.push_front(std::make_pair("Four", "Five"));
men.push_front(std::make_pair("Two", "Three"));
men.push_front(std::make_pair("Three", "Four"));
sort("Three");
for (std::string s : output)
    std::cout<<s<<std::endl;
getchar();
return 0;
}