我正在构建一个系统,该系统应该在两个字符串对中列出,并将它们排序为正确的顺序。在列表中显示:
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++;
}
}
}
答案 0 :(得分:0)
/bundles
展平为list<pair<string, string>>
list<string>
答案 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;
}