【发布时间】:2014-08-18 23:00:14
【问题描述】:
我想做两种排序,第一种如下:
给定一组不同的行,其中两个单词用空格隔开,以使下一行的第一个单词等于前一行的最后一个单词的方式对它们进行排序。例如:
- 帕梅拉·路易莎
- 路易斯安吉尔
- 佩德罗·路易斯
- 路易莎·埃兰尼
- 天使佩德罗
- 埃利安尼·帕梅拉
应该给出类似的东西:
- 路易莎·埃兰尼
- 埃利安尼·帕梅拉
- 帕梅拉·路易莎
- 佩德罗·路易斯
- 路易斯安吉尔
- 天使佩德罗
我将每一行读取为一个字符串,将其放入一个向量中并使用如下的排序比较函数:
bool cmp(std::string a, std::string b)
{
std::string prb = a.substr(a.find(" ")+1),
prb2 = b.substr(0, b.find(" "));
return prb == prb2;
}
但是为了得到想要的结果,我必须排序两次。我不明白为什么会发生这种情况。
第二个排序标准是:
给定一组单词的顺序,使得下一个单词的首字母与前一个单词的最后一个字母相同。例如:
- EO
- UIU
- 爱欧
应该给出类似的东西:
- 爱欧
- UIU
- EO
我做了类似的事情,但似乎不能正常工作。
bool cmp(std::string a, std::string b)
{
if(b[b.size()-1] == a[0] && a[0] != b[0]) return false;
return b[b.size()-1] == a[0];
}
我怎样才能使这两种排序正常工作?
【问题讨论】:
-
你需要向你的老师请教一下,因为我不知道他在问什么。
-
预期的确切结果是什么?
-
这不是作业。我就是想不通。你不明白哪些部分? @remyabel 我举了一些例子,你能指出什么是错的吗?
-
您是否将此函数传递给
std::sort?因为那(或任何其他通用排序算法)不是这种“排序”的合适工具。std::sort需要能够查看范围内的 any 两个元素,并确定是否以及哪个先出现。 -
@IgorTandetnik:#1 是(或至少可以被视为)一个排序问题——具体来说,拓扑排序,尽管如此,拓扑排序也能找到循环(和如果找到,则失败)。