multimap::insert
將某個元素或元素範圍插入 multimap 中。
// (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 |
要插入至 multimap 的元素值。 |
Where |
要開始搜尋正確的插入點的地方 (若該點緊接於 Where 之前,則可能會在分攤常數時間插入,而不是對數時間)。 |
ValTy |
範本參數,指定對應可用於建構 value_type 的元素的引數類型,並將 Val 做為引數完美轉送。 |
First |
要複製之第一個元素的位置。 |
Last |
要複製之最一個元素後方的位置。 |
InputIterator |
範本函式引數,符合輸入迭代器的需求,而迭代器會指向可用於建構 value_type 物件之類型的元素。 |
IList |
要從中複製元素的 initializer_list。 |
傳回值
單一元素插入成員函式 (1) 和 (2),會將迭代器傳回至在 multimap 中插入新元素的位置。
具有提示的單一元素成員函式 (3) 和 (4),會傳回迭代器,其指向在 multimap 中插入新元素的位置。
備註
此函式不會使指標或參考無效,但是可能會使容器的所有迭代器無效。
在只插入一個元素的期間,若擲出例外狀況,則不會修改容器的狀態。 在插入多個元素期間,若擲出例外狀況,則容器會處於未指定但有效的狀態。
容器的 value_type 是屬於容器的 typedef,而針對 map,multimap<K, V>::value_type 是 pair<const K, V>。 元素的值是已排序的配對,其中第一個元件等於索引鍵值,而第二個元件等於元素的資料值。
範圍成員函式 (5) 會將元素值序列插入 multimap,而 multimap 對應至範圍 [First, Last) 中迭代器指定的每個元素;因此不會插入 Last。 容器成員函式 end() 是指容器中最後一個元素後方的位置;例如,陳述式 m.insert(v.begin(), v.end()); 會將 v 的所有元素插入至 m。
初始設定式清單成員函式 (6) 使用 initializer_list 將元素複製到 map。
如需插入就地建構的元素 (換言之即為未執行複製或移動作業),請參閱 multimap::emplace 及 multimap::emplace_hint。
範例
// multimap_insert.cpp
// compile with: /EHsc
#include <map>
#include <iostream>
#include <string>
#include <vector>
#include <utility> // make_pair()
using namespace std;
template <typename M> void print(const M& m) {
cout << m.size() << " elements: ";
for (const auto& p : m) {
cout << "(" << p.first << ", " << p.second << ") ";
}
cout << endl;
}
int main()
{
// insert single values
multimap<int, int> m1;
// call insert(const value_type&) version
m1.insert({ 1, 10 });
// call insert(ValTy&&) version
m1.insert(make_pair(2, 20));
cout << "The original key and mapped values of m1 are:" << endl;
print(m1);
// intentionally attempt a duplicate, single element
m1.insert(make_pair(1, 111));
cout << "The modified key and mapped values of m1 are:" << endl;
print(m1);
// single element, with hint
m1.insert(m1.end(), make_pair(3, 30));
cout << "The modified key and mapped values of m1 are:" << endl;
print(m1);
cout << endl;
// The templatized version inserting a jumbled range
multimap<int, int> m2;
vector<pair<int, int>> v;
v.push_back(make_pair(43, 294));
v.push_back(make_pair(41, 262));
v.push_back(make_pair(45, 330));
v.push_back(make_pair(42, 277));
v.push_back(make_pair(44, 311));
cout << "Inserting the following vector data into m2:" << endl;
print(v);
m2.insert(v.begin(), v.end());
cout << "The modified key and mapped values of m2 are:" << endl;
print(m2);
cout << endl;
// The templatized versions move-constructing elements
multimap<int, string> m3;
pair<int, string> ip1(475, "blue"), ip2(510, "green");
// single element
m3.insert(move(ip1));
cout << "After the first move insertion, m3 contains:" << endl;
print(m3);
// single element with hint
m3.insert(m3.end(), move(ip2));
cout << "After the second move insertion, m3 contains:" << endl;
print(m3);
cout << endl;
multimap<int, int> m4;
// Insert the elements from an initializer_list
m4.insert({ { 4, 44 }, { 2, 22 }, { 3, 33 }, { 1, 11 }, { 5, 55 } });
cout << "After initializer_list insertion, m4 contains:" << endl;
print(m4);
cout << endl;
}
輸出
The original key and mapped values of m1 are:
2 elements: (1, 10) (2, 20)
The modified key and mapped values of m1 are:
3 elements: (1, 10) (1, 111) (2, 20)
The modified key and mapped values of m1 are:
4 elements: (1, 10) (1, 111) (2, 20) (3, 30)
Inserting the following vector data into m2:
5 elements: (43, 294) (41, 262) (45, 330) (42, 277) (44, 311)
The modified key and mapped values of m2 are:
5 elements: (41, 262) (42, 277) (43, 294) (44, 311) (45, 330)
After the first move insertion, m3 contains:
1 elements: (475, blue)
After the second move insertion, m3 contains:
2 elements: (475, blue) (510, green)
After initializer_list insertion, m4 contains:
5 elements: (1, 11) (2, 22) (3, 33) (4, 44) (5, 55)
需求
標頭:<map>
命名空間: std