DPO、KTO、IPO、CPO怎么选?一份给大模型创业者的对齐方法避坑指南
2026/6/14 3:45:55
set<类型> 对象名; 如:set<int> s;set<int> s; s.insert(8); s.insert(10); s.insert(6); s.insert(8); //重复元素不会插入set 的遍历也是使用迭代器进行遍历, 可以正序遍历也可以反序遍历。
set<int> s; set<int>::iterator it; for (it = s.begin(); it != s.end(); it++) cout << *it << endl;set<int>::reverse_iterator it; for (it = s.rbegin(); it != s.rend(); it++) cout << *it << endlbegin(), //返回set容器的第一个元素 end(), //返回set容器的最后一个元素 clear(), //删除set容器中的所有的元素 empty(), //判断set容器是否为空 max_size(), //返回set容器可能包含的元素最大个数 size(), //返回当前set容器中的元素个数 rbegin(), //返回的值和end()相同 rend(), //返回的值和begin()相同 erase(iterator), //删除定位器iterator指向的值 erase(first,second), //删除定位器first和second之间的值 erase(key_value), //删除键值key_value的值 find() , //返回给定值值得定位器,如果没找到则返回end()。 set中还有两个非常重要的函数,lower_bound()和upper_bound()。这两个函数都需要传入一个值。 lower_bound返回的是大于或等于被查询元素的第一个元素位置的迭代器,如果找不到,迭代器则为set.end() 。 upper_bound返回值则是>给定val的最小指针(iterator)。 rbegin() 和 rend()为反向迭代器。因为 set中的元素本身是有序的,因此 begin() 会直接返回集合中最小的元素的位置,而 end()-- 返回的是集合中最大元素的位置。
同排序函数相同,我们可以自行定义比较的方法,但具体使用同 sort 略有不同,需要自己定义一个 struct 来做具体类型的比较,同时要定义一个名为 operator 的 bool 类型函数,具体请看下面的代码。
#include <bits/stdc++.h> using namespace std; //自定义比较结构体 struct Cmp { bool operator()(int l, int r) { return l % 10 > r % 10; } }; int main() { set<int, Cmp> s; for(int i = 7; i < 27; i++) s.insert(i); set<int>::iterator it; for (it = s.begin(); it != s.end(); it++) cout << *it << endl; return 0; }