如何在 C++20 约束算法中嵌套投影元素?
How to project elements nestedly in c++20 constrained algorithms?
假设我有一个 std::vector
个 std::pair
,那么我可以使用 c++20 约束算法的投影工具根据子对象对元素进行排序:
std::vector<std::pair<int, std::string>> v;
// sort by std::string
ranges::sort(v, {}, &std::pair<int, std::string>::second);
但是这样的嵌套投影怎么做呢?
// sort by std::string::size
ranges::sort(v, {}, &std::pair<int, std::string>::second::size);
投影只是一个任意可调用对象。如果可行的话,提供指向成员的指针会很方便。但如果没有,只需使用 lambda:
ranges::sort(v, ranges::less(), [](auto const& elem) { return elem.second.size(); });
假设我有一个 std::vector
个 std::pair
,那么我可以使用 c++20 约束算法的投影工具根据子对象对元素进行排序:
std::vector<std::pair<int, std::string>> v;
// sort by std::string
ranges::sort(v, {}, &std::pair<int, std::string>::second);
但是这样的嵌套投影怎么做呢?
// sort by std::string::size
ranges::sort(v, {}, &std::pair<int, std::string>::second::size);
投影只是一个任意可调用对象。如果可行的话,提供指向成员的指针会很方便。但如果没有,只需使用 lambda:
ranges::sort(v, ranges::less(), [](auto const& elem) { return elem.second.size(); });