map::map
建構一個空的對應,或者建構為其他全部、部份複製的對應。
map( );
explicit map(
const Traits& Comp
);
map(
const Traits& Comp,
const Allocator& Al
);
map(
const map& Right
);
map(
map&& Right
);
map(
initializer_list<value_type> IList
);
map(
initializer_list<value_type> IList,
const Traits& Comp
);
map(
initializer_list<value_type> IList,
const Traits& Comp,
const Allocator& Allocator
);
template<class InputIterator>
map(
InputIterator First,
InputIterator Last
);
template<class InputIterator>
map(
InputIterator First,
InputIterator Last,
const Traits& Comp
);
template<class InputIterator>
map(
InputIterator First,
InputIterator Last,
const Traits& Comp,
const Allocator& Al
);
參數
參數 |
說明 |
Al |
這個對應物件所使用的儲存體配置器類別,預設值為 Allocator 。 |
Comp |
用於排序集合元素的 const Traits 型別比較函式,其預設值為 hash_compare。 |
Right |
在對應上,其建構的集合會成為複本。 |
First |
在要複製之項目範圍中第一個項目的位置。 |
Last |
超出要複製之項目範圍的第一個項目的位置。 |
IList |
項目會複製到 initializer_list。 |
備註
建構函式會儲存一種配置器物件型別,以用於對應管理記憶體儲存,並可藉由呼叫 get_allocator 後傳回此物件。 配置器參數通常會在類別宣告中被省略,而前置處理巨集器會以替代配置器來做代換。
所有建構函式初始化其對應。
建構函式會儲存一種 Traits 型別的函式物件,以用於在對應索引值中建立順序,並可藉由呼叫key_comp 後傳回此物件。
前三個建構函式表示此為一個初始化為空的對應,第二個建構函式則指定比較函式的型別 (Comp) ,用於建立元素順序,第三個則明確說明用到的配置器型別 (Al) 。 關鍵字 explicit 禁止某些型別的自動轉換。
第四個建構函式指定對應 Right 的複本。
第五個建構函式藉由移動 Right 以指定對應的複本。
第六個、第七個、第八個建構函式會使用複製成員的 initializer_list。
接下來的三個建構函式會在比較函式類別 Traits型別和配置器中,複製對應範圍 [First, Last) 。
範例
// map_map.cpp
// compile with: /EHsc
#include <map>
#include <iostream>
int main()
{
using namespace std;
typedef pair <int, int> Int_Pair;
map <int, int>::iterator m1_Iter, m3_Iter, m4_Iter, m5_Iter, m6_Iter, m7_Iter;
map <int, int, less<int> >::iterator m2_Iter;
// Create an empty map m0 of key type integer
map <int, int> m0;
// Create an empty map m1 with the key comparison
// function of less than, then insert 4 elements
map <int, int, less<int> > m1;
m1.insert(Int_Pair(1, 10));
m1.insert(Int_Pair(2, 20));
m1.insert(Int_Pair(3, 30));
m1.insert(Int_Pair(4, 40));
// Create an empty map m2 with the key comparison
// function of geater than, then insert 2 elements
map <int, int, less<int> > m2;
m2.insert(Int_Pair(1, 10));
m2.insert(Int_Pair(2, 20));
// Create a map m3 with the
// allocator of map m1
map <int, int>::allocator_type m1_Alloc;
m1_Alloc = m1.get_allocator();
map <int, int> m3(less<int>(), m1_Alloc);
m3.insert(Int_Pair(3, 30));
// Create a copy, map m4, of map m1
map <int, int> m4(m1);
// Create a map m5 by copying the range m1[_First, _Last)
map <int, int>::const_iterator m1_bcIter, m1_ecIter;
m1_bcIter = m1.begin();
m1_ecIter = m1.begin();
m1_ecIter++;
m1_ecIter++;
map <int, int> m5(m1_bcIter, m1_ecIter);
// Create a map m6 by copying the range m4[_First, _Last)
// and with the allocator of map m2
map <int, int>::allocator_type m2_Alloc;
m2_Alloc = m2.get_allocator();
map <int, int> m6(m4.begin(), ++m4.begin(), less<int>(), m2_Alloc);
cout << "m1 =";
for (auto i : m1)
cout << i.first << " " << i.second << ", ";
cout << endl;
cout << "m2 =";
for(auto i : m2)
cout << i.first << " " << i.second << ", ";
cout << endl;
cout << "m3 =";
for (auto i : m3)
cout << i.first << " " << i.second << ", ";
cout << endl;
cout << "m4 =";
for (auto i : m4)
cout << i.first << " " << i.second << ", ";
cout << endl;
cout << "m5 =";
for (auto i : m5)
cout << i.first << " " << i.second << ", ";
cout << endl;
cout << "m6 =";
for (auto i : m6)
cout << i.first << " " << i.second << ", ";
cout << endl;
// Create a map m7 by moving m5
cout << "m7 =";
map<int, int> m7(move(m5));
for (auto i : m7)
cout << i.first << " " << i.second << ", ";
cout << endl;
// Create a map m8 by copying in an initializer_list
map<int, int> m8{ { { 1, 1 }, { 2, 2 }, { 3, 3 }, { 4, 4 } } };
cout << "m8: = ";
for (auto i : m8)
cout << i.first << " " << i.second << ", ";
cout << endl;
// Create a map m9 with an initializer_list and a comparator
map<int, int> m9({ { 5, 5 }, { 6, 6 }, { 7, 7 }, { 8, 8 } }, less<int>());
cout << "m9: = ";
for (auto i : m9)
cout << i.first << " " << i.second << ", ";
cout << endl;
// Create a map m10 with an initializer_list, a comparator, and an allocator
map<int, int> m10({ { 9, 9 }, { 10, 10 }, { 11, 11 }, { 12, 12 } }, less<int>(), m9.get_allocator());
cout << "m10: = ";
for (auto i : m10)
cout << i.first << " " << i.second << ", ";
cout << endl;
}
Output
m1 = 10 20 30 40
m2 = 10 20
m3 = 30
m4 = 10 20 30 40
m5 = 10 20
m6 = 10
m7 = 10 20
m8: = 1 1, 2 2, 3 3, 4 4,
m9: = 5 5, 6 6, 7 7, 8 8,
m10: = 9 9, 10 10, 11 11, 12 12,
需求
標頭:<map>
命名空間: std