📜  C++ STL-Multiset.insert()函数

📅  最后修改于: 2020-10-19 07:50:07             🧑  作者: Mango

C++ STL Multiset.insert()

C++ Multiset insert()函数用于在多集中插入新元素或一系列元素。

句法

single element (1)     iterator 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 
             void insert (InputIterator first, InputIterator last);        //until C++ 11

single element (1)  iterator insert (const value_type& val);
                                iterator 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 
                          void insert (InputIterator first, InputIterator last);            //since C++ 11

initializer list (4)       void insert (initializer_list il);              //since C++ 11

参数

val:要插入多集的值。

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

first:要插入值的范围的开始。

last:要插入值的范围的结尾。

il:初始化列表。

返回值

insert()函数返回一个迭代器,该迭代器指向多集中新插入的元素。

复杂度

如果插入单个元素,则复杂度的大小将为对数。

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

迭代器有效性

没有变化。

数据竞争

容器已修改。

同时访问multiset的现有元素是安全的,尽管容器中的迭代范围不是。

异常安全

此函数不会引发异常。

例子1

让我们看一个简单的示例,将元素插入多集中:

#include 
#include 

using namespace std;

int main()
{
    multiset s;
 
    s.insert(1);
    s.insert(4);
    s.insert(2);
    s.insert(3);
    s.insert(3);
 
    cout << "The elements in multiset are: ";
    for (auto it = s.begin(); it != s.end(); it++)
        cout << *it << " ";
 
    return 0;
}

输出:

The elements in multiset are: 1 2 3 3 4

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

例子2

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

#include 
#include 

using namespace std;

int main()
{ 
    multiset s;
 
    // Function to insert elements
    // in the multiset 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, 4);
    itr = s.insert(itr, 3);
 
    cout << "The elements in multiset are: ";
    for (auto it = s.begin(); it != s.end(); it++)
        cout << *it << " ";
 
    return 0;
}

输出:

The elements in multiset are: 1 2 3 4 4 

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

例子3

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

#include 
# include
# include

using namespace std;

int main()
{ 
    multiset s1;
 
    // Function to insert elements
    // in the multiset container
    s1.insert(1);
    s1.insert(4);
    s1.insert(2);
    s1.insert(4);
    s1.insert(3);
 
    cout << "The elements in multiset1 are: ";
    for (auto it = s1.begin(); it != s1.end(); it++)
        cout << *it << " ";
 
    multiset s2;
 
    // Function to insert one multiset to another
    // all elements from where 3 is to end is
    // inserted to multiset2
    s2.insert(s1.find(3), s1.end());
 
    cout << "\nThe elements in multiset2 are: ";
    for (auto it = s2.begin(); it != s2.end(); it++)
        cout << *it << " ";
 
    return 0;
}

输出:

The elements in multiset1 are: 1 2 3 4 4 
The elements in multiset2 are: 3 4 4  

例子4

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

#include 
#include 

using namespace std;

int main(void) {
   multiset m = {"Java", "C++", "SQL"};
   
  // Insert the elements from an initializer_list 
   m.insert({"C++", "Oracle"});

   cout << "Multiset contains following elements" << endl;

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

   return 0;
}

输出:

Multiset contains following elements
C++
C++
Java
Oracle
SQL

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