C++ set insert() 使用方法及示例

C++ STL Set(集合)

C ++ set insert()用于在集合中插入新元素

因为元素键在集合中是唯一的,所以插入操作首先检查给定键是否已存在于集合中,如果键存在于集合中,则不会将其插入到集合中并迭代到现有的迭代器返回键,否则将新元素插入集合。

语法

//普通引用方式传参
pair<iterator,bool> insert (const value_type& val);
//右值引用方式传参
pair<iterator,bool> insert (value_type&& val);
//以普通引用的方式传递 val 值
iterator insert (const_iterator position, const value_type& val);
//以右值引用的方式传递 val 值
iterator insert (const_iterator position, value_type&& val);
template <class InputIterator>
  void insert (InputIterator first, InputIterator last);
  void insert (initializer_list<value_type> il);              //从 C++ 11开始

参数

val:要插入集合的值。

position:提示在元素中插入元素的位置。

first:要插入范围的起点。

last:要插入范围的末尾。

il:初始化列表。

返回值

返回布尔对以表示是否发生插入,并返回指向新插入元素的迭代器。

复杂

  • 如果插入单个元素,那么复杂度将是对数的。

  • 如果给出提示,并且给出的位置是最佳位置,则复杂度将摊销为常数。

迭代器有效性

没有变化。

数据争用

容器已修改。

异常安全

此函数不会引发异常。

实例1

让我们看一下将元素插入到集合中的简单示例:

#include <iostream>
#include <set>

using namespace std;
int main()
{
    set<int> s;
 
    // 插入元素的函数
    // 在set容器中
    s.insert(1);
    s.insert(4);
    s.insert(2);
    s.insert(5);
    s.insert(3);
 
    cout << "集合中的元素是: ";
    for (auto it = s.begin(); it != s.end(); it++)
        cout << *it << " ";
 
    return 0;
}

输出:

集合中的元素是: 1 2 3 4 5

在上面的示例中,它只是使用给定的键插入元素。

实例2

让我们看一个简单的示例,将元素插入指定位置:

#include <iostream>
#include <set>

using namespace std;

int main()
{ 
    set<int> s;
 
     //插入元素的函数
     //在set容器中
    auto itr = s.insert(s.begin(), 1);
 
    itr = s.insert(itr, 4);
    itr = s.insert(itr, 2);
    itr = s.insert(itr, 5);
    itr = s.insert(itr, 3);
 
    cout << "集合中的元素是: ";
    for (auto it = s.begin(); it != s.end(); it++)
        cout << *it << " ";
 
    return 0;
}

输出:

集合中的元素是: 1 2 3 4 5

在上面的示例中,元素被插入到定义的位置。

实例3

让我们看一个简单的示例,将给定范围内的一组元素插入到另一组:

#include <iostream>
# include<iostream>
# include<set>

using namespace std;

int main()
{ 
    set<int> s1;
 
    //插入元素的函数
     //在set容器中
    s1.insert(1);
    s1.insert(4);
    s1.insert(2);
    s1.insert(5);
    s1.insert(3);
 
    cout << "set1中的元素是: ";
    for (auto it = s1.begin(); it != s1.end(); it++)
        cout << *it << " ";
 
    set<int> s2;
 
    //函数将一个集合插入到另一个集合
    //从3到结束的所有元素是
    //插入set2
    s2.insert(s1.find(3), s1.end());
 
    cout << "\nset2中的元素是: ";
    for (auto it = s2.begin(); it != s2.end(); it++)
        cout << *it << " ";
 
    return 0;
}

输出:

set1中的元素是: 1 2 3 4 5 
set2中的元素是: 3 4 5

实例4

让我们看一个简单的示例,从初始化列表中插入元素:

#include <iostream>
#include <set>

using namespace std;

int main(void) {
   set<string> m = {"Java", "C++", "SQL"};
   
  // 插入初始化器列表中的元素
   m.insert({"VB", "Oracle"});

   cout << "集合包含以下元素:" << endl;

   for (auto it = m.begin(); it != m.end(); ++it)
      cout << *it<< endl;

   return 0;
}

输出:

集合包含以下元素:
C++
Java
Oracle
SQL
VB

在上面的示例中,元素是从初始化列表中插入的。

C++ STL Set(集合)