multiset::insert
将一个元素或元素范围插入到多重集合中。
// (1) single element pair<iterator, bool> insert( const value_type& Val ); // (2) single element, perfect forwarded template<class ValTy> pair<iterator, bool> insert( ValTy&& Val ); // (3) single element with hint iterator insert( const_iterator Where, const value_type& Val ); // (4) single element, perfect forwarded, with hint template<class ValTy> iterator insert( const_iterator Where, ValTy&& Val ); // (5) range template<class InputIterator> void insert( InputIterator First, InputIterator Last ); // (6) initializer list void insert( initializer_list<value_type> IList );
参数
参数 |
描述 |
Val |
要插入到多重集合中的元素的值。 |
Where |
开始搜索正确插入点的位置。 (如果该点紧贴在 Where 之前,则插入可能发生在分期常量时间内而非对数时间内。) |
ValTy |
指定多重集合可用于构造 value_type 元素的参数类型并将 Val 作为参数完美转发的模板参数。 |
First |
要复制的第一个元素的位置。 |
Last |
要复制的最后一个元素以外的位置。 |
InputIterator |
满足输入迭代器要求的模板函数参数,该输入迭代器指向可用于构造 value_type 对象的类型的元素。 |
IList |
从中复制元素的 initializer_list。 |
返回值
单个元素插入的成员函数 (1) 和 (2) 返回迭代器,该迭代器指向将新元素插入到多重集合中的位置。
附带提示的单个元素的成员函数 (3) 和 (4) 返回迭代器,该迭代器指向将新元素插入到多重集合中的位置。
备注
指针或引用不会因为此函数而失效,但是它可能会使所有指向容器的迭代器都失效。
在插入单个元素的过程中,如果引发异常,则不会修改该容器的状态。 在插入多个元素的过程中,如果引发异常,则会使容器处于未指定但有效的状态。
容器的 value_type 是属于该容器的 typedef;对于集合,multiset<V>::value_type 是 const V 类型。
范围成员函数 (5) 将元素值序列插入到多重集合中,它对应于迭代器在范围 [First, Last) 中所处理的每一个元素;因此,不会插入 Last。 容器成员函数 end() 是指容器中最后一个元素之后的位置,例如,s.insert(v.begin(), v.end()); 语句会将 v 的所有元素插入到 s 中。
初始值设定项列表成员函数 (6) 使用 initializer_list 将元素复制到多重集合中。
有关就地构造的元素的插入(即不会执行复制或移动操作),请参阅 multiset::emplace 和 multiset::emplace_hint。
示例
// multiset_insert.cpp
// compile with: /EHsc
#include <set>
#include <iostream>
#include <string>
#include <vector>
using namespace std;
template <typename S> void print(const S& s) {
cout << s.size() << " elements: ";
for (const auto& p : s) {
cout << "(" << p << ") ";
}
cout << endl;
}
int main()
{
// insert single values
multiset<int> s1;
// call insert(const value_type&) version
s1.insert({ 1, 10 });
// call insert(ValTy&&) version
s1.insert(20);
cout << "The original multiset values of s1 are:" << endl;
print(s1);
// intentionally attempt a duplicate, single element
s1.insert(1);
cout << "The modified multiset values of s1 are:" << endl;
print(s1);
cout << endl;
// single element, with hint
s1.insert(s1.end(), 30);
cout << "The modified multiset values of s1 are:" << endl;
print(s1);
cout << endl;
// The templatized version inserting a jumbled range
multiset<int> s2;
vector<int> v;
v.push_back(43);
v.push_back(294);
v.push_back(41);
v.push_back(330);
v.push_back(42);
v.push_back(45);
cout << "Inserting the following vector data into s2:" << endl;
print(v);
s2.insert(v.begin(), v.end());
cout << "The modified multiset values of s2 are:" << endl;
print(s2);
cout << endl;
// The templatized versions move-constructing elements
multiset<string> s3;
string str1("blue"), str2("green");
// single element
s3.insert(move(str1));
cout << "After the first move insertion, s3 contains:" << endl;
print(s3);
// single element with hint
s3.insert(s3.end(), move(str2));
cout << "After the second move insertion, s3 contains:" << endl;
print(s3);
cout << endl;
multiset<int> s4;
// Insert the elements from an initializer_list
s4.insert({ 4, 44, 2, 22, 3, 33, 1, 11, 5, 55 });
cout << "After initializer_list insertion, s4 contains:" << endl;
print(s4);
cout << endl;
}
输出
The original multiset values of s1 are:
3 elements: (1) (10) (20)
The modified multiset values of s1 are:
4 elements: (1) (1) (10) (20)
The modified multiset values of s1 are:
5 elements: (1) (1) (10) (20) (30)
Inserting the following vector data into s2:
6 elements: (43) (294) (41) (330) (42) (45)
The modified multiset values of s2 are:
6 elements: (41) (42) (43) (45) (294) (330)
After the first move insertion, s3 contains:
1 elements: (blue)
After the second move insertion, s3 contains:
2 elements: (blue) (green)
After initializer_list insertion, s4 contains:
10 elements: (1) (2) (3) (4) (5) (11) (22) (33) (44) (55)
要求
标头:<set>
命名空间: std