在 C++20 中按长度对 std::vector<std::string> 进行排序的代码是否正确?
Is the code for sorting a std::vector<std::string> by length correct in C++20?
我编写了一个按长度对向量字符串进行排序的代码。不幸的是,我不确定它是否会以这种形式出现在下一个标准中。这是 C++20 中的正确代码吗?
#include <algorithm>
#include <iostream>
#include <string>
#include <ranges>
#include <vector>
int main() {
std::vector<std::string> words = {"std", "vector", "string", "optional", "clamp"};
// C++11
// std::sort(words.begin(), words.end(),
// [](auto& lhs, auto& rhs) { return lhs.length() < rhs.length(); });
// maybe C++20?
using namespace std::ranges;
sort(words, {}, size); // or 'sort(words, less{}, size);'
for (auto& word : words) {
std::cout << word << "\n";
}
}
您的代码没有问题,可以在即将发布的 GCC 10 下编译。
正如@Ayxan 指出的那样,C++20 仍将具有通常的算法,因此如果您不想,则无需更改代码。
如果您有一些代码仅使用标准库或非常常用的库,您可以尝试使用较新的编译器和实验性标准版本在以下网站上编译它:
- 编译器资源管理器 - https://godbolt.org/
- Coliru ("COmpile, LInk and RU") - http://coliru.stacked-crooked.com/
和其他人。
我编写了一个按长度对向量字符串进行排序的代码。不幸的是,我不确定它是否会以这种形式出现在下一个标准中。这是 C++20 中的正确代码吗?
#include <algorithm>
#include <iostream>
#include <string>
#include <ranges>
#include <vector>
int main() {
std::vector<std::string> words = {"std", "vector", "string", "optional", "clamp"};
// C++11
// std::sort(words.begin(), words.end(),
// [](auto& lhs, auto& rhs) { return lhs.length() < rhs.length(); });
// maybe C++20?
using namespace std::ranges;
sort(words, {}, size); // or 'sort(words, less{}, size);'
for (auto& word : words) {
std::cout << word << "\n";
}
}
您的代码没有问题,可以在即将发布的 GCC 10 下编译。
正如@Ayxan 指出的那样,C++20 仍将具有通常的算法,因此如果您不想,则无需更改代码。
如果您有一些代码仅使用标准库或非常常用的库,您可以尝试使用较新的编译器和实验性标准版本在以下网站上编译它:
- 编译器资源管理器 - https://godbolt.org/
- Coliru ("COmpile, LInk and RU") - http://coliru.stacked-crooked.com/
和其他人。