排序这些单词的排序标准
Sorting criteria for ordering this words?
我想做两种类型的排序,第一种如下:
给定一组不同的行,其中两个单词用空格分隔,以下一行的第一个单词等于前一行的最后一个单词的方式排列它们。例如:
- 帕梅拉•路易莎
- 路易斯·安琪儿
- 佩德罗Luis
- 路易莎Elianny
- 天使佩德罗
- Elianny帕梅拉
应该像这样:
- 路易莎Elianny
- Elianny帕梅拉
- 帕梅拉•路易莎
- 佩德罗Luis
- 路易斯·安琪儿
- 天使佩德罗
我读取每一行作为一个字符串,把它放在一个向量和使用排序比较函数,像这样:
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];
}
我怎样才能使这两个排序工作良好?
首先,问题2可以简化为问题1。将每个字符串替换为由第一个字母和最后一个字母组成的字符串,以空格分隔;例如,AEIOU
变成A U
。那么很明显,在这些新字符串上解决问题#1也将给出在原始字符串上解决问题#2的方法。
第二,这是一个在有向图中寻找哈密顿路径的问题。所讨论的图由输入字符串作为顶点组成,在形式为X Y
和Y Z
的每对顶点之间绘制一条边。
这个问题,如前所述,是不明确的:当图不包含哈密顿路径时,不清楚什么是正确的答案。您的示例中Pamela Luisa
后跟Pedro Luis
,这不满足要求。一种可能的解释是寻找最小路径覆盖。
可能有比这更好的方法,但我将首先遍历所有单词并为它们分配数字0到n。
然后每行可以表示为有序的数字对。
然后,如果有k条线,则创建一个(k x k)的bool矩阵。
在每个位置上,如果该列的第二个单词与该行的第一个单词匹配,则设置为true,否则设置为false。
此时,您应该能够实现一个简单的回溯搜索,以找到一些行序列(x_0, x_1,…),使得矩阵[x_i][x_{i+1}]对所有i = true。
希望这对你有帮助。如果你能解决第一个问题,第二个问题应该是非常相似的。
- 在C++标准中,语法选项的表示中没有隐含的排序,这种说法正确吗
- 标准::map键类型的严格弱排序概念
- 如果要求比较器是严格的总排序,而不仅仅是严格的弱排序,C++标准算法会更快吗?
- 解释标准库排序函数C++的比较谓词的工作原理?
- 如何将标准::矢量插入具有自定义排序功能的 std::set 中
- 如何按降序对标准数组进行排序 - C++ 11.
- 如何在不使用标准算法的情况下在排序向量中添加 c 元素?
- 有没有办法为集合指定不同的唯一性和排序标准
- 使用标准库根据一个数组对两个数组进行排序(避免复制步骤)
- 是否存在用于按以下方式对两个范围进行排序和分区的标准算法?
- 根据标准对结构向量进行排序,然后显示结果
- 使用标准库对矢量的矢量进行排序,并计算唯一出现的频率
- 如何在c++中使用两个排序标准(对于一组对)创建有序集
- 是否按多个标准进行快速排序
- 对标准库容器类型进行排序的static_assert() 的优雅方式
- 对变量上的标准构造进行排序
- 排序标准::映射<字符串,双精度>
- 排序这些单词的排序标准
- 具有多个排序标准的对象的排序向量
- C++ 标准::排序 标准::矢量<Object> - 错误太多