struct Person { std::string name; int age; };int main() { std::vector<Person> people = {{"Alice", 30}, {"Bob", 25}, {"Charlie", 35}}; std::ranges::sort(people, {}, &Person::age); // 按 age 属性排序 for (const auto& person : people) { std::cout << person.name << " "; // 输出: Bob Alice Charlie }}
在这个例子中调用了Person::age将容器内的元素转化为age进行比较
views::take / views::drop
这是view命名空间下的函数,作用是取前n个(take) 去前n个(drop)
语法规则:auto vi_1 = v | view::take(n)
其中:v 是容器 , n 是取的值, vi_1是一个视图
视图可以采用范围for的迭代方式,如果要对视图进行操作,可以使用两种解决方案:
使用.begin() + index操作视图
使用 to<vector>操作
vector<int> v = vw | ranges::to<vector>();
int main(){ vector<int> a = {1,2,3,4,5}; auto a1 = a | views::take(2); for(auto && i : a1) { cout << i << " "; } // 输出 1 2 cout << endl; auto a2 = a | views::drop(2); for(auto && i : a2) { cout < i << " "; } // 输出 3 4 5 6 cout << endl; auto vi = a2 | ranges::to<vector>(); for(auto && i : a2) { cout << i << " "; } //输出同 a2}