【发布时间】:2020-07-07 02:24:03
【问题描述】:
如何按特定顺序对字符串向量进行排序:
从字长取模值 3
字符串的字典比较(第一个数字,小写,大写)
我的代码:
#include <iostream>
#include <algorithm>
#include <vector>
#include <tuple>
#include <string>
int main() {
std::vector<std::string> words = {
"cat1",
"cata",
"cataaaa",
"cataAaa",
"catD",
"dogdog",
"dog"
};
std::sort(words.begin(), words.end(), [&](auto const& lhs, auto const& rhs) {
return std::make_tuple(lhs.length() % 3, lhs)
< std::make_tuple(rhs.length() % 3, rhs);
});
for (auto& word : words) {
std::cout << word << "\n";
}
}
输出:
dog
dogdog
cat1
catD
cata
cataAaa
cataaaa
我想要什么:
dog
dogdog
cat1
cata
catD
cataaaa
cataAaa
【问题讨论】:
-
大多数实现使用 ASCII 兼容的代码页,这意味着英文大写字母在小写字母之前。您可以在排序之前将大写转换为小写并反转,也可以编写自己的比较函数。
-
在 ASCII 码中,
std::string的字典排序以数字、大写、小写而不是数字、小写、大写的形式工作。如果需要,您必须为std::string创建自己的比较函数并在 lambda 中调用它。 -
写一个自定义字符串比较器?我怀疑,
if即将出现在你的兰巴车上。 -
% 3的作用是什么?
标签: c++ sorting stl c++14 string-comparison