我如何在 C++ 中用整数对字符串进行排序?
How can i sort a string with integers in c++?
我想对一些相同大小的字符串进行排序。字符串的大小可以非常大 (10^18)。我怎样才能在更短的时间内对所有的刺进行分类?所有输入字符串的大小将相等。如何在尽可能短的时间内对这些字符串进行排序?
922003001020293839297830207344987344973074734
766352786207892397340783784078348747606208602
182823068326283756515117829362376823572395775
//the size of all the strings are equal
谁能解释一下更好的排序方式?
谢谢你的任何帮助将不胜感激。
碰巧一个仅包含数字的字符串可以按字母顺序排序,因此您只需将每个 string into a vector, and simply sort 向量。
如前所述,这仅在 "numbers" 都具有相同位数的情况下才有效。否则,您需要用前导零填充字符串,使它们的长度都相同。一旦对向量进行排序,就可以删除前导零。
这里用头算法中的std::sort完成了
#include <iostream>
#include <string>
#include <algorithm>
#include <vector>
int main(){
std::vector<std::string> nums{
"922003001020293839297830207344987344973074734",
"766352786207892397340783784078348747606208602",
"182823068326283756515117829362376823572395775"
};
std::cout << "unsorted: " << std::endl;
for (auto i : nums){
std::cout << i << std::endl;
}
std::sort(nums.begin(), nums.end()); //sort it
std::cout << "\nsorted: " << std::endl;
for (auto i : nums){
std::cout << i << std::endl;
}
system("pause");
return 0;
}
输出:
unsorted:
922003001020293839297830207344987344973074734
766352786207892397340783784078348747606208602
182823068326283756515117829362376823572395775
sorted:
182823068326283756515117829362376823572395775
766352786207892397340783784078348747606208602
922003001020293839297830207344987344973074734
我想对一些相同大小的字符串进行排序。字符串的大小可以非常大 (10^18)。我怎样才能在更短的时间内对所有的刺进行分类?所有输入字符串的大小将相等。如何在尽可能短的时间内对这些字符串进行排序?
922003001020293839297830207344987344973074734
766352786207892397340783784078348747606208602
182823068326283756515117829362376823572395775
//the size of all the strings are equal
谁能解释一下更好的排序方式? 谢谢你的任何帮助将不胜感激。
碰巧一个仅包含数字的字符串可以按字母顺序排序,因此您只需将每个 string into a vector, and simply sort 向量。
如前所述,这仅在 "numbers" 都具有相同位数的情况下才有效。否则,您需要用前导零填充字符串,使它们的长度都相同。一旦对向量进行排序,就可以删除前导零。
这里用头算法中的std::sort完成了
#include <iostream>
#include <string>
#include <algorithm>
#include <vector>
int main(){
std::vector<std::string> nums{
"922003001020293839297830207344987344973074734",
"766352786207892397340783784078348747606208602",
"182823068326283756515117829362376823572395775"
};
std::cout << "unsorted: " << std::endl;
for (auto i : nums){
std::cout << i << std::endl;
}
std::sort(nums.begin(), nums.end()); //sort it
std::cout << "\nsorted: " << std::endl;
for (auto i : nums){
std::cout << i << std::endl;
}
system("pause");
return 0;
}
输出:
unsorted:
922003001020293839297830207344987344973074734
766352786207892397340783784078348747606208602
182823068326283756515117829362376823572395775
sorted:
182823068326283756515117829362376823572395775
766352786207892397340783784078348747606208602
922003001020293839297830207344987344973074734