标签:
map是存储由密钥值和映射值的组合构成的元素,下列特定的顺序关联容器。 在map中,密钥值一般用于排序和唯一标识的元素,而映射的值存储关联于该键的内容。类型的键和映射值可能不同,并且在构件的类型的value_type,这是一对型组合都被分组在一起: ms-help://MS.MSDNQTR.v90.chs/dv_vcstdlib/html/d590e984-54b0-43cf-a72a-90d70171ac3e.htm http://www.cplusplus.com/reference/map/map/ begin 返回迭代开始 end 返回迭代结束 rbegin 返回反向迭代器反向开始 rend 返回反向迭代器反向端 cbegin 返回的const_iterator开头) cend 返回的const_iterator结束 crbegin 返回的const_reverse_iterator反转开始 crend 返回的const_reverse_iterator反向端 empty 测试容器是否是空的 size 返回容器的大小 max_size返回最大尺寸 insert 插入元素 erase 删除元素 swap 交换的内容 clear 清除内容 emplace 构建并插入元素 emplace_hint构建并插入提示元素 key_comp 返回键比较对象 value_comp返回值比较对象 find 获得迭代器元素 count 算上与特定的要素 lower_bound返回迭代器下限 upper_bound返回迭代上限 equal_range获得平等的要素的范围 get_allocator 获得分配
#include <map>
#include <iostream>
#include <xfunctional>
//构造函数
void mapConstructor(void);
//返回指向map中的第一个元素的迭代器
void map_begin(void);
//擦除的map的所有元素
void map_clear(void);
//返回一个map,其中关键的参数中指定的关键字相匹配元件的数目
void map_count(void);
//判断是否为空
void map_empty(void);
//返回一个指向map的最后一个元素之后位置的迭代器。
void map_end(void);
//返回一对迭代器。在一对点的第一个迭代的第一元件与一个键比指定的键更大的map。在一对指向一个密钥等于或大于此键映射中的第一元件的第二迭代。
void map_equal_range(void);
//删除元素或一个范围从指定的位置在map的元素。
void map_erase(void);
//返回指向一个元素的位置在map上,有一个键等于指定密钥的迭代器。
void map_find(void);
//返回一个用于构造图分配器对象的副本。
void map_get_allocator(void);
//在插入指定位置的元素或一系列元素融入map
void map_insert(void);
//返回用于在map命令密钥的比较对象的副本
void map_key_comp(void);
//返回一个迭代的第一元件中的map具有密钥值,该值大于指定的键的等于或大于
void map_lower_bound(void);
//返回map的最大长度
void map_max_size(void);
//返回指向第一元件以相反的map的迭代
void map_rbegin(void);
//返回一个指向一个反向映射的最后一个元素之后位置的迭代器
void map_rend(void);
//返回该map要素的数量
void map_size(void);
//两个map的交换元素
void map_swap(void);
//返回一个迭代器的第一个元素在map中有一个关键值比指定的键更大
void map_upper_bound(void);
//检索比较对象的副本,用于在map中订购元素值
void map_value_comp(void);
int main()
{
//mapConstructor();
//map_begin();
//map_clear();
//map_count();
//map_empty();
//map_end();
//map_equal_range();
//map_erase();
//map_find();
//map_get_allocator();
//map_insert();
//map_key_comp();
//map_lower_bound();
//map_max_size();
//map_rbegin();
//map_rend();
//map_size();
//map_swap();
//map_upper_bound();
map_value_comp();
return 0;
}
//构造函数
void mapConstructor(void)
{
using namespace std;
typedef pair <int, int> Int_Pair;
map <int, int>::iterator m1_Iter, m3_Iter, m4_Iter, m5_Iter, m6_Iter;
map <int, int, greater<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, greater<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 (m1_Iter = m1.begin(); m1_Iter != m1.end(); m1_Iter++)
cout << " " << m1_Iter->second;
cout << endl;
cout << "m2 =";
for (m2_Iter = m2.begin(); m2_Iter != m2.end(); m2_Iter++)
cout << " " << m2_Iter->second;
cout << endl;
cout << "m3 =";
for (m3_Iter = m3.begin(); m3_Iter != m3.end(); m3_Iter++)
cout << " " << m3_Iter->second;
cout << endl;
cout << "m4 =";
for (m4_Iter = m4.begin(); m4_Iter != m4.end(); m4_Iter++)
cout << " " << m4_Iter->second;
cout << endl;
cout << "m5 =";
for (m5_Iter = m5.begin(); m5_Iter != m5.end(); m5_Iter++)
cout << " " << m5_Iter->second;
cout << endl;
cout << "m6 =";
for (m6_Iter = m6.begin(); m6_Iter != m6.end(); m6_Iter++)
cout << " " << m6_Iter->second;
cout << endl;
return;
/*
m1 = 10 20 30 40
m2 = 20 10
m3 = 30
m4 = 10 20 30 40
m5 = 10 20
m6 = 10
请按任意键继续. . .
*/
}
//返回指向map中的第一个元素的迭代器
void map_begin(void)
{
using namespace std;
map <int, int> m1;
map <int, int> ::iterator m1_Iter;
map <int, int> ::const_iterator m1_cIter;
typedef pair <int, int> Int_Pair;
m1.insert(Int_Pair(0, 0));
m1.insert(Int_Pair(1, 1));
m1.insert(Int_Pair(2, 4));
m1_cIter = m1.begin();
cout << "The first element of m1 is " << m1_cIter->first << endl;
m1_Iter = m1.begin();
m1.erase(m1_Iter);
// The following 2 lines would err because the iterator is const
// m1_cIter = m1.begin ( );
// m1.erase ( m1_cIter );
m1_cIter = m1.begin();
cout << "The first element of m1 is now " << m1_cIter->first << endl;
return;
/*
The first element of m1 is 0
The first element of m1 is now 1
请按任意键继续. . .
*/
}
//擦除的map的所有元素
void map_clear(void)
{
using namespace std;
map<int, int> m1;
map<int, int>::size_type i;
typedef pair<int, int> Int_Pair;
m1.insert(Int_Pair(1, 1));
m1.insert(Int_Pair(2, 4));
i = m1.size();
cout << "The size of the map is initially "
<< i << "." << endl;
m1.clear();
i = m1.size();
cout << "The size of the map after clearing is "
<< i << "." << endl;
return;
/*
The size of the map is initially 2.
The size of the map after clearing is 0.
请按任意键继续. . .
*/
}
//返回一个map,其中关键的参数中指定的关键字相匹配元件的数目
void map_count(void)
{
using namespace std;
map<int, int> m1;
map<int, int>::size_type i;
typedef pair<int, int> Int_Pair;
m1.insert(Int_Pair(1, 1));
m1.insert(Int_Pair(2, 1));
m1.insert(Int_Pair(1, 4));
m1.insert(Int_Pair(2, 1));
// Keys must be unique in map, so duplicates are ignored
i = m1.count(1);
cout << "The number of elements in m1 with a sort key of 1 is: "
<< i << "." << endl;
i = m1.count(2);
cout << "The number of elements in m1 with a sort key of 2 is: "
<< i << "." << endl;
i = m1.count(3);
cout << "The number of elements in m1 with a sort key of 3 is: "
<< i << "." << endl;
return;
/*
The number of elements in m1 with a sort key of 1 is: 1.
The number of elements in m1 with a sort key of 2 is: 1.
The number of elements in m1 with a sort key of 3 is: 0.
请按任意键继续. . .
*/
}
//判断是否为空
void map_empty(void)
{
using namespace std;
map <int, int> m1, m2;
typedef pair <int, int> Int_Pair;
m1.insert(Int_Pair(1, 1));
if (m1.empty())
cout << "The map m1 is empty." << endl;
else
cout << "The map m1 is not empty." << endl;
if (m2.empty())
cout << "The map m2 is empty." << endl;
else
cout << "The map m2 is not empty." << endl;
return;
/*
The map m1 is not empty.
The map m2 is empty.
请按任意键继续. . .
*/
}
//返回一个指向map的最后一个元素之后位置的迭代器。
void map_end(void)
{
using namespace std;
map <int, int> m1;
map <int, int> ::iterator m1_Iter;
map <int, int> ::const_iterator m1_cIter;
typedef pair <int, int> Int_Pair;
m1.insert(Int_Pair(1, 10));
m1.insert(Int_Pair(2, 20));
m1.insert(Int_Pair(3, 30));
m1_cIter = m1.end();
m1_cIter--;
cout << "The value of the last element of m1 is:\n"
<< m1_cIter->second << endl;
m1_Iter = m1.end();
m1_Iter--;
m1.erase(m1_Iter);
// The following 2 lines would err because the iterator is const
// m1_cIter = m1.end ( );
// m1_cIter--;
// m1.erase ( m1_cIter );
m1_cIter = m1.end();
m1_cIter--;
cout << "The value of the last element of m1 is now:\n"
<< m1_cIter->second << endl;
return;
/*
The value of the last element of m1 is:
30
The value of the last element of m1 is now:
20
请按任意键继续. . .
*/
}
void map_equal_range(void)
{
using namespace std;
typedef map <int, int, less<int> > IntMap;
IntMap m1;
map <int, int> ::const_iterator m1_RcIter;
typedef pair <int, int> Int_Pair;
m1.insert(Int_Pair(1, 10));
m1.insert(Int_Pair(2, 20));
m1.insert(Int_Pair(3, 30));
pair <IntMap::const_iterator, IntMap::const_iterator> p1, p2;
p1 = m1.equal_range(2);
cout << "The lower bound of the element with "
<< "a key of 2 in the map m1 is: "
<< p1.first->second << "." << endl;
cout << "The upper bound of the element with "
<< "a key of 2 in the map m1 is: "
<< p1.second->second << "." << endl;
// Compare the upper_bound called directly
m1_RcIter = m1.upper_bound(2);
cout << "A direct call of upper_bound( 2 ) gives "
<< m1_RcIter->second << "," << endl
<< " matching the 2nd element of the pair"
<< " returned by equal_range( 2 )." << endl;
p2 = m1.equal_range(4);
// If no match is found for the key,
// both elements of the pair return end( )
if ((p2.first == m1.end()) && (p2.second == m1.end()))
cout << "The map m1 doesn't have an element "
<< "with a key less than 40." << endl;
else
cout << "The element of map m1 with a key >= 40 is: "
<< p2.first->first << "." << endl;
return;
/*
The lower bound of the element with a key of 2 in the map m1 is: 20.
The upper bound of the element with a key of 2 in the map m1 is: 30.
A direct call of upper_bound( 2 ) gives 30,
matching the 2nd element of the pair returned by equal_range( 2 ).
The map m1 doesn't have an element with a key less than 40.
请按任意键继续. . .
*/
}
//删除元素或一个范围从指定的位置在map的元素。
void map_erase(void)
{
using namespace std;
map<int, int> m1, m2, m3;
map<int, int>::iterator pIter, Iter1, Iter2;
int i;
map<int, int>::size_type n;
typedef pair<int, int> Int_Pair;
for (i = 1; i < 5; i++)
{
m1.insert(Int_Pair(i, i));
m2.insert(Int_Pair(i, i*i));
m3.insert(Int_Pair(i, i - 1));
}
// The 1st member function removes an element at a given position
Iter1 = ++m1.begin();
m1.erase(Iter1);
cout << "After the 2nd element is deleted, the map m1 is:";
for (pIter = m1.begin(); pIter != m1.end(); pIter++)
cout << " " << pIter->second;
cout << "." << endl;
// The 2nd member function removes elements
// in the range [_First, _Last)
Iter1 = ++m2.begin();
Iter2 = --m2.end();
m2.erase(Iter1, Iter2);
cout << "After the middle two elements are deleted,"
<< " the map m2 is:";
for (pIter = m2.begin(); pIter != m2.end(); pIter++)
cout << " " << pIter->second;
cout << "." << endl;
// The 3rd member function removes elements with a given _Key
n = m3.erase(2);
cout << "After the element with a key of 2 is deleted,\n"
<< "the map m3 is:";
for (pIter = m3.begin(); pIter != m3.end(); pIter++)
cout << " " << pIter->second;
cout << "." << endl;
// The 3rd member function returns the number of elements removed
cout << "The number of elements removed from m3 is: "
<< n << "." << endl;
// The dereferenced iterator can also be used to specify a key
Iter1 = ++m3.begin();
m3.erase(Iter1);
cout << "After another element with a key equal to that"
<< endl;
cout << "of the 2nd element is deleted, "
<< "the map m3 is:";
for (pIter = m3.begin(); pIter != m3.end(); pIter++)
cout << " " << pIter->second;
cout << "." << endl;
return;
/*
After the 2nd element is deleted, the map m1 is: 1 3 4.
After the middle two elements are deleted, the map m2 is: 1 16.
After the element with a key of 2 is deleted,
the map m3 is: 0 2 3.
The number of elements removed from m3 is: 1.
After another element with a key equal to that
of the 2nd element is deleted, the map m3 is: 0 3.
请按任意键继续. . .
*/
}
//返回指向一个元素的位置在map上,有一个键等于指定密钥的迭代器。
void map_find(void)
{
using namespace std;
map <int, int> m1;
map <int, int> ::const_iterator m1_AcIter, m1_RcIter;
typedef pair <int, int> Int_Pair;
m1.insert(Int_Pair(1, 10));
m1.insert(Int_Pair(2, 20));
m1.insert(Int_Pair(3, 30));
m1_RcIter = m1.find(2);
cout << "The element of map m1 with a key of 2 is: "
<< m1_RcIter->second << "." << endl;
// If no match is found for the key, end( ) is returned
m1_RcIter = m1.find(4);
if (m1_RcIter == m1.end())
cout << "The map m1 doesn't have an element "
<< "with a key of 4." << endl;
else
cout << "The element of map m1 with a key of 4 is: "
<< m1_RcIter->second << "." << endl;
// The element at a specific location in the map can be found
// using a dereferenced iterator addressing the location
m1_AcIter = m1.end();
m1_AcIter--;
m1_RcIter = m1.find(m1_AcIter->first);
cout << "The element of m1 with a key matching "
<< "that of the last element is: "
<< m1_RcIter->second << "." << endl;
return;
/*
The element of map m1 with a key of 2 is: 20.
The map m1 doesn't have an element with a key of 4.
The element of m1 with a key matching that of the last element is: 30.
请按任意键继续. . .
*/
}
//返回一个用于构造图分配器对象的副本。
void map_get_allocator(void)
{
using namespace std;
map <int, int>::allocator_type m1_Alloc;
map <int, int>::allocator_type m2_Alloc;
map <int, double>::allocator_type m3_Alloc;
map <int, int>::allocator_type m4_Alloc;
// The following lines declare objects
// that use the default allocator.
map <int, int> m1;
map <int, int, allocator<int> > m2;
map <int, double, allocator<double> > m3;
m1_Alloc = m1.get_allocator();
m2_Alloc = m2.get_allocator();
m3_Alloc = m3.get_allocator();
cout << "The number of integers that can be allocated\n"
<< "before free memory is exhausted: "
<< m2.max_size() << ".\n" << endl;
cout << "The number of doubles that can be allocated\n"
<< "before free memory is exhausted: "
<< m3.max_size() << ".\n" << endl;
// The following line creates a map m4
// with the allocator of map m1.
map <int, int> m4(less<int>(), m1_Alloc);
m4_Alloc = m4.get_allocator();
// Two allocators are interchangeable if
// storage allocated from each can be
// deallocated with the other
if (m1_Alloc == m4_Alloc)
{
cout << "The allocators are interchangeable." << endl;
}
else
{
cout << "The allocators are not interchangeable." << endl;
}
return;
/*
The number of integers that can be allocated
before free memory is exhausted: 178956970.
The number of doubles that can be allocated
before free memory is exhausted: 134217727.
The allocators are interchangeable.
请按任意键继续. . .
*/
}
//在插入指定位置的元素或一系列元素融入map
void map_insert(void)
{
using namespace std;
map <int, int>::iterator m1_pIter, m2_pIter;
map <int, int> m1, m2;
typedef pair <int, int> Int_Pair;
m1.insert(Int_Pair(1, 10));
m1.insert(Int_Pair(2, 20));
m1.insert(Int_Pair(3, 30));
m1.insert(Int_Pair(4, 40));
cout << "The original key values of m1 =";
for (m1_pIter = m1.begin(); m1_pIter != m1.end(); m1_pIter++)
cout << " " << m1_pIter->first;
cout << "." << endl;
cout << "The original mapped values of m1 =";
for (m1_pIter = m1.begin(); m1_pIter != m1.end(); m1_pIter++)
cout << " " << m1_pIter->second;
cout << "." << endl;
pair< map<int, int>::iterator, bool > pr;
pr = m1.insert(Int_Pair(1, 10));
if (pr.second == true) {
cout << "The element 10 was inserted in m1 successfully." << endl;
}
else {
cout << "Key number 1 already exists in m1\n"
<< "with an associated value of ( (pr.first) -> second ) = "
<< (pr.first)->second
<< "." << endl;
}
// The hint version of insert
m1.insert(--m1.end(), Int_Pair(5, 50));
cout << "After the insertions, the key values of m1 =";
for (m1_pIter = m1.begin(); m1_pIter != m1.end(); m1_pIter++)
cout << " " << m1_pIter->first;
cout << "," << endl;
cout << "and the mapped values of m1 =";
for (m1_pIter = m1.begin(); m1_pIter != m1.end(); m1_pIter++)
cout << " " << m1_pIter->second;
cout << "." << endl;
m2.insert(Int_Pair(10, 100));
// The templatized version inserting a range
m2.insert(++m1.begin(), --m1.end());
cout << "After the insertions, the key values of m2 =";
for (m2_pIter = m2.begin(); m2_pIter != m2.end(); m2_pIter++)
cout << " " << m2_pIter->first;
cout << "," << endl;
cout << "and the mapped values of m2 =";
for (m2_pIter = m2.begin(); m2_pIter != m2.end(); m2_pIter++)
cout << " " << m2_pIter->second;
cout << "." << endl;
return;
}
//返回用于在map命令密钥的比较对象的副本
void map_key_comp(void)
{
using namespace std;
map <int, int, less<int> > m1;
map <int, int, less<int> >::key_compare kc1 = m1.key_comp();
bool result1 = kc1(2, 3);
if (result1 == true)
{
cout << "kc1( 2,3 ) returns value of true, "
<< "where kc1 is the function object of m1."
<< endl;
}
else
{
cout << "kc1( 2,3 ) returns value of false "
<< "where kc1 is the function object of m1."
<< endl;
}
map <int, int, greater<int> > m2;
map <int, int, greater<int> >::key_compare kc2 = m2.key_comp();
bool result2 = kc2(2, 3);
if (result2 == true)
{
cout << "kc2( 2,3 ) returns value of true, "
<< "where kc2 is the function object of m2."
<< endl;
}
else
{
cout << "kc2( 2,3 ) returns value of false, "
<< "where kc2 is the function object of m2."
<< endl;
}
return;
/*
kc1( 2,3 ) returns value of true, where kc1 is the function object of m1.
kc2( 2,3 ) returns value of false, where kc2 is the function object of m2.
请按任意键继续. . .
*/
}
//返回一个迭代的第一元件中的map具有密钥值,该值大于指定的键的等于或大于
void map_lower_bound(void)
{
using namespace std;
map <int, int> m1;
map <int, int> ::const_iterator m1_AcIter, m1_RcIter;
typedef pair <int, int> Int_Pair;
m1.insert(Int_Pair(1, 10));
m1.insert(Int_Pair(2, 20));
m1.insert(Int_Pair(3, 30));
m1_RcIter = m1.lower_bound(2);
cout << "The first element of map m1 with a key of 2 is: "
<< m1_RcIter->second << "." << endl;
// If no match is found for this key, end( ) is returned
m1_RcIter = m1.lower_bound(4);
if (m1_RcIter == m1.end())
cout << "The map m1 doesn't have an element "
<< "with a key of 4." << endl;
else
cout << "The element of map m1 with a key of 4 is: "
<< m1_RcIter->second << "." << endl;
// The element at a specific location in the map can be found
// using a dereferenced iterator addressing the location
m1_AcIter = m1.end();
m1_AcIter--;
m1_RcIter = m1.lower_bound(m1_AcIter->first);
cout << "The element of m1 with a key matching "
<< "that of the last element is: "
<< m1_RcIter->second << "." << endl;
return;
/*
The first element of map m1 with a key of 2 is: 20.
The map m1 doesn't have an element with a key of 4.
The element of m1 with a key matching that of the last element is: 30.
请按任意键继续. . .
*/
}
//返回map的最大长度
void map_max_size(void)
{
using namespace std;
map <int, int> m1;
map <int, int> ::size_type i;
i = m1.max_size();
cout << "The maximum possible length "
<< "of the map is " << i << "."
<< endl << "(Magnitude is machine specific.)";
return;
/*
The maximum possible length of the map is 178956970.
(Magnitude is machine specific.)请按任意键继续. . .
*/
}
//返回指向第一元件以相反的map的迭代
void map_rbegin(void)
{
using namespace std;
map <int, int> m1;
map <int, int> ::iterator m1_Iter;
map <int, int> ::reverse_iterator m1_rIter;
map <int, int> ::const_reverse_iterator m1_crIter;
typedef pair <int, int> Int_Pair;
m1.insert(Int_Pair(1, 10));
m1.insert(Int_Pair(2, 20));
m1.insert(Int_Pair(3, 30));
m1_rIter = m1.rbegin();
cout << "The first element of the reversed map m1 is "
<< m1_rIter->first << "." << endl;
// begin can be used to start an iteration
// through a map in a forward order
cout << "The map is: ";
for (m1_Iter = m1.begin(); m1_Iter != m1.end(); m1_Iter++)
cout << m1_Iter->first << " ";
cout << "." << endl;
// rbegin can be used to start an iteration
// through a map in a reverse order
cout << "The reversed map is: ";
for (m1_rIter = m1.rbegin(); m1_rIter != m1.rend(); m1_rIter++)
cout << m1_rIter->first << " ";
cout << "." << endl;
// A map element can be erased by dereferencing to its key
m1_rIter = m1.rbegin();
m1.erase(m1_rIter->first);
m1_rIter = m1.rbegin();
cout << "After the erasure, the first element "
<< "in the reversed map is "
<< m1_rIter->first << "." << endl;
return;
/*
The first element of the reversed map m1 is 3.
The map is: 1 2 3 .
The reversed map is: 3 2 1 .
After the erasure, the first element in the reversed map is 2.
请按任意键继续. . .
*/
}
//返回一个指向一个反向映射的最后一个元素之后位置的迭代器
void map_rend(void)
{
using namespace std;
map <int, int> m1;
map <int, int> ::iterator m1_Iter;
map <int, int> ::reverse_iterator m1_rIter;
map <int, int> ::const_reverse_iterator m1_crIter;
typedef pair <int, int> Int_Pair;
m1.insert(Int_Pair(1, 10));
m1.insert(Int_Pair(2, 20));
m1.insert(Int_Pair(3, 30));
m1_rIter = m1.rend();
m1_rIter--;
cout << "The last element of the reversed map m1 is "
<< m1_rIter->first << "." << endl;
// begin can be used to start an iteration
// through a map in a forward order
cout << "The map is: ";
for (m1_Iter = m1.begin(); m1_Iter != m1.end(); m1_Iter++)
cout << m1_Iter->first << " ";
cout << "." << endl;
// rbegin can be used to start an iteration
// through a map in a reverse order
cout << "The reversed map is: ";
for (m1_rIter = m1.rbegin(); m1_rIter != m1.rend(); m1_rIter++)
cout << m1_rIter->first << " ";
cout << "." << endl;
// A map element can be erased by dereferencing to its key
m1_rIter = --m1.rend();
m1.erase(m1_rIter->first);
m1_rIter = m1.rend();
m1_rIter--;
cout << "After the erasure, the last element "
<< "in the reversed map is "
<< m1_rIter->first << "." << endl;
return;
/*
The last element of the reversed map m1 is 1.
The map is: 1 2 3 .
The reversed map is: 3 2 1 .
After the erasure, the last element in the reversed map is 2.
请按任意键继续. . .
*/
}
//返回该map要素的数量
void map_size(void)
{
using namespace std;
map<int, int> m1, m2;
map<int, int>::size_type i;
typedef pair<int, int> Int_Pair;
m1.insert(Int_Pair(1, 1));
i = m1.size();
cout << "The map length is " << i << "." << endl;
m1.insert(Int_Pair(2, 4));
i = m1.size();
cout << "The map length is now " << i << "." << endl;
return;
/*
The map length is 1.
The map length is now 2.
请按任意键继续. . .
*/
}
//两个map的交换元素
void map_swap(void)
{
using namespace std;
map <int, int> m1, m2, m3;
map <int, int>::iterator m1_Iter;
typedef pair <int, int> Int_Pair;
m1.insert(Int_Pair(1, 10));
m1.insert(Int_Pair(2, 20));
m1.insert(Int_Pair(3, 30));
m2.insert(Int_Pair(10, 100));
m2.insert(Int_Pair(20, 200));
m3.insert(Int_Pair(30, 300));
cout << "The original map m1 is:";
for (m1_Iter = m1.begin(); m1_Iter != m1.end(); m1_Iter++)
cout << " " << m1_Iter->second;
cout << "." << endl;
// This is the member function version of swap
//m2 is said to be the argument map; m1 the target map
m1.swap(m2);
cout << "After swapping with m2, map m1 is:";
for (m1_Iter = m1.begin(); m1_Iter != m1.end(); m1_Iter++)
cout << " " << m1_Iter->second;
cout << "." << endl;
// This is the specialized template version of swap
swap(m1, m3);
cout << "After swapping with m3, map m1 is:";
for (m1_Iter = m1.begin(); m1_Iter != m1.end(); m1_Iter++)
cout << " " << m1_Iter->second;
cout << "." << endl;
return;
/*
The original map m1 is: 10 20 30.
After swapping with m2, map m1 is: 100 200.
After swapping with m3, map m1 is: 300.
请按任意键继续. . .
*/
}
//返回一个迭代器的第一个元素在map中有一个关键值比指定的键更大
void map_upper_bound(void)
{
using namespace std;
map <int, int> m1;
map <int, int> ::const_iterator m1_AcIter, m1_RcIter;
typedef pair <int, int> Int_Pair;
m1.insert(Int_Pair(1, 10));
m1.insert(Int_Pair(2, 20));
m1.insert(Int_Pair(3, 30));
m1_RcIter = m1.upper_bound(2);
cout << "The first element of map m1 with a key "
<< "greater than 2 is: "
<< m1_RcIter->second << "." << endl;
// If no match is found for the key, end is returned
m1_RcIter = m1.upper_bound(4);
if (m1_RcIter == m1.end())
cout << "The map m1 doesn't have an element "
<< "with a key greater than 4." << endl;
else
cout << "The element of map m1 with a key > 4 is: "
<< m1_RcIter->second << "." << endl;
// The element at a specific location in the map can be found
// using a dereferenced iterator addressing the location
m1_AcIter = m1.begin();
m1_RcIter = m1.upper_bound(m1_AcIter->first);
cout << "The 1st element of m1 with a key greater than\n"
<< "that of the initial element of m1 is: "
<< m1_RcIter->second << "." << endl;
return;
/*
The first element of map m1 with a key greater than 2 is: 30.
The map m1 doesn't have an element with a key greater than 4.
The 1st element of m1 with a key greater than
that of the initial element of m1 is: 20.
请按任意键继续. . .
*/
}
//检索比较对象的副本,用于在map中订购元素值
void map_value_comp(void)
{
using namespace std;
map <int, int, less<int> > m1;
map <int, int, less<int> >::value_compare vc1 = m1.value_comp();
pair< map<int, int>::iterator, bool > pr1, pr2;
pr1 = m1.insert(map <int, int> ::value_type(1, 10));
pr2 = m1.insert(map <int, int> ::value_type(2, 5));
if (vc1(*pr1.first, *pr2.first) == true)
{
cout << "The element ( 1,10 ) precedes the element ( 2,5 )."
<< endl;
}
else
{
cout << "The element ( 1,10 ) does not precede the element ( 2,5 )."
<< endl;
}
if (vc1(*pr2.first, *pr1.first) == true)
{
cout << "The element ( 2,5 ) precedes the element ( 1,10 )."
<< endl;
}
else
{
cout << "The element ( 2,5 ) does not precede the element ( 1,10 )."
<< endl;
}
return;
/*
The element ( 1,10 ) precedes the element ( 2,5 ).
The element ( 2,5 ) does not precede the element ( 1,10 ).
请按任意键继续. . .
*/
}标签:
原文地址:http://blog.csdn.net/qq125096885/article/details/51284956