为什么用户定义的函数不按照给定的顺序对相同长度的元素进行排序?
why doesn't user defined function sort the elements of same length in the order given?
我的任务是按字符串长度的递增顺序对单词进行排序,对于相同长度的单词,我必须按给定的顺序排列它们。 例如:"成为或不成为"将变为"成为或不是"。 我首先制作字符串中所有单词的向量"v",然后尝试使用 C++ 的 sort(( 函数中的用户定义函数对向量进行排序。 这是我的代码:
#include <bits/stdc++.h>
using namespace std;
static bool comparelength(string first,string second){//function to compare length
return first.size()<second.size();
}
int main() {
string text="Jlhvvd wfwnphmxoa qcuucx qsvqskq cqwfypww dyphntfz hkbwx xmwohi qvzegb ubogo sbdfmnyeim tuqppyipb llwzeug hrsaebveez aszqnvruhr xqpqd ipwbapd mlghuuwvec xpefyglstj dkvhhgecd kry";
vector<string> v;
string cur="";
text+=" ";
for(int i=0;i<text.size();i++){
if(text[i]==32){//if space is encountered then the word is inserted in the vector
v.push_back(cur);
cur="";
}
else{
cur+=text[i];//if not space then text[i] is added to the current word
}
}
sort(v.begin(),v.end(),comparelength);//sort the vector
for(int i=0;i<v.size();i++)
cout<<v[i]<<" ";
现在它给出以下输出: "Kry xqpqd ubogo hkbwx qvzegb jlhvvd xmwohi qcuucx qsvqskq llwzeug ipwbapd dyphntfz cqwfypww tuqppyipb dkvhhgecd sbdfmnyeim xpefyglstj mlghuuwvec aszqnvruhr hrsaebveez wfwnphmxoa">
但正确的输出应该是: "Kry hkbwx ubogo xqpqd jlhvvd qcuucx xmwohi qvzegb qsvqskq llwzeug ipwbapd cqwfypww dyphntfz tuqppyipb dkvhhgecd wfwnphmxoa sbdfmnyeim hrsaebveez aszqnvruhr mlghuuwvec xpefyglstj">
请参阅位置 1、2 和 3(使用 0 索引(。
它应该给出:HKBWX Ubogo XQPQD。
但它给出了:XQPQD Ubogo HKBWX。
这让我认为它没有按照给定的顺序对相同长度的单词进行排序。您可以找到许多其他发生这种情况的位置(例如:4,5,6 和 7(。
但是对于字符串"leetcode plus try suck geaser 是最好的" 它给出了正确的输出:"是尝试加吸酷最好的Geaser 利特科德">
谁能说清楚为什么它不适用于前一个字符串,而适用于后者。 我试过做
static bool comparelength(string first,string second){
if(first.size()==second.size())
return true;
if(first.size()<second.size())
return true;
else
return false;
}
但这会引发运行时错误。
很抱歉让问题变得混乱,但我真的很想了解这一点。
std::sort
不稳定,即等效元素的顺序不一定保留。如果您从std::sort
那里获得稳定的排序,那么这只是偶然的。稳定排序更昂贵(O(N·log(N)^2)
vsO(N·log(N))
(,因此您必须明确要求它。可以用std::stable_sort
来完成。
如果要填充std::pair<std::string,size_t>
容器,其中second
是原始容器中的索引,则可以将std::sort
与自定义比较器一起使用。但是,我想使用std::stable_sort
更简单。
- 查找两个排序向量中共有的元素
- C++ 如何比较n个排序的整数向量以找到互元素?
- 如何在 c++ 中根据第二个元素按降序对列表进行排序
- 对的排序向量 (std::vector<pair<int, int>>) 按对的第一个元素搜索并更新第二个元素值
- 高级选择排序 - 在一次迭代中搜索两个元素
- 为什么用户定义的函数不按照给定的顺序对相同长度的元素进行排序?
- 为什么这个选择排序算法仍然切换一个元素,当它已经是其他元素中最小的元素时?
- 快速排序 - 三个中位数枢轴选择 - 某些元素顺序不正确
- 将一系列已排序的元素划分为相邻组
- 如何通过保持第一个插入的位置来对列表中插入的其余元素进行排序?
- 保持排序的数据结构,允许log N插入时间,并且可以返回我在log N中查找的元素的索引
- "x"的所有元素都存在于"y"(排序向量)中吗?
- 如何根据对的第二个元素对 STL c++ 中的一组对进行排序?
- 如何在保持它们连接到同一元素的同时对 2 个数组进行排序?
- 使用 pair 创建priority_queue,以便在第一个元素相等时"<"第一个元素的排序,对第二个元素">"排序
- 如何将元素排序到矩阵C++
- 如何保持按第二个元素排序的对的优先级队列?
- 如何从两个数组中生成一对向量,然后使用CUDA/Thrust按对的第一个元素排序
- 部分排序数组,最后n个元素排序
- 如何对一对向量按降序排序,并按第二个元素排序