SetInsert函数是C++ STL库中set容器类中的成员函数之一,用于向set容器中插入元素。其函数原型如下所示:
std::pair<iterator, bool> insert(const value_type& val)
该函数返回一个std::pair对象,第一个元素是一个迭代器,它指向被插入元素的位置,第二个元素是一个bool类型,它指示元素是否被成功插入。
一、函数的使用方法
在使用set容器的insert函数时,需要传递一个value_type类型的参数。value_type是set容器中存储元素的类型,和set类型定义中所指定的类型相同。对于一个int类型的set,value_type则为int。
如果元素已经存在于set中,则insert操作无法插入该元素,并返回当前元素的迭代器以及bool类型的false值;否则,insert操作会将该元素插入到set中,并返回插入元素的迭代器以及bool类型的true值。下面是一个插入元素的示例:
//创建set对象 std::set<int> s; //插入元素 s.insert(10); s.insert(30); s.insert(20);
二、函数的特性
1. 自动去重
set容器自动对插入的元素进行去重,即set容器中不会存在相同的元素。如果你插入一个已经存在于set中的元素,那么这个元素不会被插入到set中。下面的示例展示了使用insert函数进行去重的操作:
std::set<int> myset; std::set<int>:iterator it; myset.insert(10); myset.insert(20); myset.insert(30); it = myset.insert(20); if (it.second == false) \ cout << "element already exists" << endl;
2. 元素插入位置
set容器中的元素是按照一定的顺序进行存储的。元素插入时不是按照插入的顺序来存储,而是按照set容器类型定义中指定的元素类型进行排序存储的,这样会降低插入元素的复杂度。所以,如果元素插入顺序是随机的,则插入元素的顺序和最终的set的顺序不一定相同。下面是一个插入元素的示例:
std::set<int> myset; std::set<int>:iterator it; std::pair<std::set<int>:iterator, bool> ret; //插入元素 ret = myset.insert(30); it = ret.first; printf("*it is : %d\n", *it); ret = myset.insert(20); it = ret.first; printf("*it is : %d\n", *it); ret = myset.insert(10); it = ret.first; printf("*it is : %d\n", *it);
三、函数的示例
1. 插入一个元素
下面是一个实例,展示如何使用insert插入一个元素:
std::set<int> myset; std::set<int>::iterator it; //插入元素 it = myset.insert(10); //输出myset for (it=myset.begin(); it!=myset.end(); ++it) std::cout << ' ' << *it; std::cout << std::endl;
2. 插入多个元素
下面是一个实例,展示如何使用insert插入多个元素:
std::set<int> myset; std::set<int>::iterator it; int arr[] = {10, 20, 30, 40, 50}; myset.insert(arr, arr+5); //输出myset for (it=myset.begin(); it!=myset.end(); ++it) std::cout << ' ' << *it; std::cout << std::endl;
3. 插入容器中不存在的元素
下面是一个实例,展示如何使用insert插入容器中不存在的元素:
std::set<int> myset; std::set<int>::iterator it; std::pair<std::set<int>::iterator,bool> ret; //插入元素 ret = myset.insert(10); if (ret.second==false) { it=ret.first; std::cout << "element already exists" << std::endl; } ret = myset.insert(20); if (ret.second==false) { it=ret.first; std::cout << "element already exists" << std::endl; } ret = myset.insert(30); if (ret.second==false) { it=ret.first; std::cout << "element already exists" << std::endl; } //输出myset for (it=myset.begin(); it!=myset.end(); ++it) std::cout << ' ' << *it; std::cout << std::endl;
4. 插入容器中已经存在的元素
下面是一个实例,展示如何使用insert插入容器中已经存在的元素:
std::set<int> myset; std::set<int>::iterator it; std::pair<std::set<int>::iterator,bool> ret; //插入元素 ret = myset.insert(10); if (ret.second==false) { it=ret.first; std::cout << "element already exists" << std::endl; } //再次插入相同的元素 ret = myset.insert(10); if (ret.second==false) { it=ret.first; std::cout << "element already exists" << std::endl; } //输出myset for (it=myset.begin(); it!=myset.end(); ++it) std::cout << ' ' << *it; std::cout << std::endl;
5. 插入结构体类型元素
set容器可以存储自定义的结构体类型。下面是一个示例,展示如何使用insert函数插入结构体类型元素:
#include <set> #include <iostream> #include <iomanip> #include <string> typedef struct Student { std::string name; int age; bool operator()(const Student &stu1, const Student &stu2) const { return stu1.name < stu2.name; } }Student; //定义operator()用于自定义排序 int main() { std::set<Student, Student> student_list; std::set<Student, Student>::iterator it; Student s1, s2, s3; s1.name = "Tom"; s1.age = 20; s2.name = "Jerry"; s2.age = 22; s3.name = "Lisa"; s3.age = 19; student_list.insert(s1); student_list.insert(s2); student_list.insert(s3); for (it=student_list.begin(); it!=student_list.end(); ++it) std::cout << std::setw(10) << it->name << std::setw(10) << it->age << std::endl; return 0; }
以上就是C++ STL库set容器中insert函数的用法、特性及示例。需要注意的是,set容器是按照元素类型进行默认的排序,如果需要按照特定的排序规则来存储元素,则可以通过自定义函数对象的方式来实现排序。
原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/297221.html