C++ set insert()函数
C++ set insert() 用于将新元素插入集合中。
由于集合中的元素键是 唯一 的,因此插入操作首先检查给定的键是否已经存在于集合中,如果键已经存在于集合中,则不插入到集合中并返回指向现有键的迭代器,否则将新元素插入到集合中。
语法
single element (1) pair<iterator,bool> insert (const value_type& val); //until C++ 11
with hint (2) iterator insert (iterator position, const value_type& val); //until C++ 11
range (3) template <class InputIterator>
void insert (InputIterator first, InputIterator last); //until C++ 11
single element (1) pair<iterator,bool> insert (const value_type& val);
pair<iterator,bool> insert (value_type&& val); //since C++ 11
with hint (2) iterator insert (const_iterator position, const value_type& val);
iterator insert (const_iterator position, value_type&& val); //since C++ 11
range (3) template <class InputIterator>
void insert (InputIterator first, InputIterator last); //since C++ 11
initializer list (4) void insert (initializer_list<value_type> il); //since C++ 11
参数
val : 要插入集合中的值。
position : 指示要插入元素的位置的提示。
first : 插入范围的开始位置。
last : 插入范围的结束位置。
il : 初始化列表。
返回值
返回一个布尔对,用于指示是否发生了插入,并返回一个指向新插入的元素的迭代器。
复杂度
- 如果插入单个元素,复杂度将是对数大小。
- 如果给出了提示并且给出的位置是最佳位置,则复杂度将是分摊常数。
迭代器有效性
没有变化。
数据竞赛
容器被修改。
异常安全性
该函数不会抛出异常。
示例1
让我们看一个简单的示例,将元素插入集合中:
#include <iostream>
#include <set>
using namespace std;
int main()
{
set<int> s;
// Function to insert elements
// in the set container
s.insert(1);
s.insert(4);
s.insert(2);
s.insert(5);
s.insert(3);
cout << "The elements in set are: ";
for (auto it = s.begin(); it != s.end(); it++)
cout << *it << " ";
return 0;
}
输出:
The elements in set are: 1 2 3 4 5
在上面的示例中,它只是将具有给定键的元素插入。
示例2
让我们看一个简单的示例,在指定位置插入元素:
#include <iostream>
#include <set>
using namespace std;
int main()
{
set<int> s;
// Function to insert elements
// in the set container
auto itr = s.insert(s.begin(), 1);
// the time taken to insertion
// is very less as the correct
// position for insertion is given
itr = s.insert(itr, 4);
itr = s.insert(itr, 2);
itr = s.insert(itr, 5);
itr = s.insert(itr, 3);
cout << "The elements in set are: ";
for (auto it = s.begin(); it != s.end(); it++)
cout << *it << " ";
return 0;
}
输出:
The elements in set are: 1 2 3 4 5
在上面的示例中,元素被插入到定义的位置中。
示例3
让我们看一个简单的示例,在给定范围内将一个集合的元素插入到另一个集合中:
#include <iostream>
# include<iostream>
# include<set>
using namespace std;
int main()
{
set<int> s1;
// Function to insert elements
// in the set container
s1.insert(1);
s1.insert(4);
s1.insert(2);
s1.insert(5);
s1.insert(3);
cout << "The elements in set1 are: ";
for (auto it = s1.begin(); it != s1.end(); it++)
cout << *it << " ";
set<int> s2;
// Function to insert one set to another
// all elements from where 3 is to end is
// inserted to set2
s2.insert(s1.find(3), s1.end());
cout << "\nThe elements in set2 are: ";
for (auto it = s2.begin(); it != s2.end(); it++)
cout << *it << " ";
return 0;
}
输出:
The elements in set1 are: 1 2 3 4 5
The elements in set2 are: 3 4 5
示例4
让我们看一个简单的示例,从初始化列表中插入元素:
#include <iostream>
#include <set>
using namespace std;
int main(void) {
set<string> m = {"Java", "C++", "SQL"};
// Insert the elements from an initializer_list
m.insert({"VB", "Oracle"});
cout << "Set contains following elements" << endl;
for (auto it = m.begin(); it != m.end(); ++it)
cout << *it<< endl;
return 0;
}
输出:
Set contains following elements
C++
Java
Oracle
SQL
VB
在上面的示例中,元素是从初始化列表中插入的。