CHAPTER10-41.cpp
上传用户:fjc899
上传日期:2007-07-03
资源大小:187k
文件大小:5k
源码类别:

STL

开发平台:

C/C++

  1. //文件名:CHAPTER10-41.cpp
  2. #pragma warning(disable: 4786)
  3. #include <map>
  4. #include <iostream>
  5. #include <string>
  6. typedef std::map<int, std::string> MAP_INT_STR ;
  7. typedef MAP_INT_STR::iterator MAP_ITERATOR ;
  8. typedef MAP_INT_STR::reverse_iterator MAP_REVERSE_ITERATOR ;
  9. typedef std::pair<int, std::string> PAIR_INT_STR ;
  10. template <class ITERATOR>
  11. void print_map_item(ITERATOR it)
  12. {  std::cout << (*it).first << ", " << (*it).second << std::endl ;}
  13. int main()
  14. {
  15. //默认构造函数
  16. MAP_INT_STR c1 ;
  17. PAIR_INT_STR pairs[5] = { PAIR_INT_STR(1, std::string("one")),
  18. PAIR_INT_STR(2, std::string("two")),
  19. PAIR_INT_STR(3, std::string("three")),
  20. PAIR_INT_STR(4, std::string("four")),
  21. PAIR_INT_STR(5, std::string("five"))
  22. };
  23. //定义map变量,并且通过数组赋值
  24. MAP_INT_STR c2(pairs, pairs + 5) ;
  25. //拷贝构造函数
  26. MAP_INT_STR c3(c2) ;
  27. //判断是否为空值
  28. if(c1.empty())
  29. { std::cout << "c1 is empty" << std::endl ; }
  30. else
  31. { std::cout << "c1 is not empty" << std::endl ; }
  32. //采用begin, end获取首末迭代器
  33. std::cout << "c2 (using begin, end) = " << std::endl ;
  34. MAP_ITERATOR Iter1 ;
  35. for(Iter1 = c2.begin(); Iter1 != c2.end(); Iter1++)
  36. { print_map_item(Iter1) ; }
  37. //采用rbegin, rend获取反向首末迭代器
  38. std::cout << "c2 (using rbegin, rend) = " << std::endl ;
  39. MAP_REVERSE_ITERATOR RevIter1 ;
  40. for(RevIter1 = c2.rbegin(); RevIter1 != c2.rend(); RevIter1++)
  41. { print_map_item(RevIter1) ; }
  42. //采用insert插入元素
  43. std::pair<MAP_ITERATOR, bool> result ;
  44. result = c1.insert(MAP_INT_STR::value_type(6, std::string("six"))) ;
  45. if(result.second == true)
  46. { std::cout << "a pair of key/data was inserted in c1, *(result.first) = " ; print_map_item(result.first); 
  47. }
  48. else
  49. { std::cout << "pair(6, "six") was not inserted in c1" << std::endl ; }
  50. c1.insert(pairs, pairs + 5) ;
  51. c1.insert(c1.begin(), PAIR_INT_STR(0, std::string("zero"))) ;
  52. //采用find进行元素查找
  53. std::cout << "Does c1 contain any pair with key = 6?" << std::endl ;
  54. Iter1 = c1.find(6) ;
  55. if(Iter1 != c1.end())
  56. {
  57. std::cout << "c1 contains pair:" ;
  58. print_map_item(Iter1) ;
  59. }
  60. else
  61. { std::cout << "c1 does not contain any element with key = 6" << std::endl ; }
  62. //采用operator[]进行元素赋值
  63. c1[8] = "eight" ;
  64. std::cout << "Last key/data pair in c1 = " ;
  65. print_map_item(c1.rbegin()) ;
  66. //利用max_size获取最大元素大小
  67. std::cout << "max elements which c1 can hold uisng current allocator = "
  68. << c1.max_size() << std::endl ;
  69. //利用size获取元素实际大小
  70. std::cout << "number of elements in c1 = " << c1.size() << std::endl ;
  71. //采用swap进行元素交换
  72. c1.swap(c2) ;
  73. std::cout << "Last key/data pair in c1 = " ;
  74. print_map_item(c1.rbegin()) ;
  75. //采用clear进行元素清除
  76. c3.clear() ;
  77. std::cout << "after calling c3.clear(), number of elements in c3 = " << c3.size() << std::endl ;
  78. //get_allocator获取内存分配器
  79. MAP_INT_STR::allocator_type a1 = c3.get_allocator() ;
  80. //key_comp比较关键值
  81. MAP_INT_STR::key_compare kc = c1.key_comp() ;
  82. std::cout << "use function object kc to find less of (10, 4)..." << std::endl ;
  83. if (kc(10, 4) == true)
  84. std::cout << "kc(10, 4) == true, which means 10 < 4" << std::endl ;
  85. else
  86. std::cout << "kc(10, 4) == false, which means 10 > 4" << std::endl ;
  87. //value_comp比较实值
  88. MAP_INT_STR::value_compare vc = c1.value_comp() ;
  89. std::cout << "use function object vc to compare int-string pairs..." << std::endl ;
  90. std::cout << "pairs[0] = (" << pairs[0].first << ", " << pairs[0].second << ")" << std::endl ;
  91. std::cout << "pairs[1] = (" << pairs[1].first << ", " 
  92. << pairs[1].second << ")" << std::endl ;
  93. if ( vc(pairs[0], pairs[1]) == true)
  94. std::cout << "pairs[0] < pairs[1]" << std::endl ;
  95. else
  96. std::cout << "pairs[0] > pairs[1]" << std::endl ;
  97. //获取上迭代器upper_bound
  98. Iter1 = c2.upper_bound(6) ;
  99. std::cout << "first map element with key > 6 = " ;
  100. print_map_item(Iter1) ;
  101. //获取下迭代器lower_bound
  102. Iter1 = c2.lower_bound(6) ;
  103. std::cout << "first map element with key 6 = " ;
  104. print_map_item(Iter1) ;
  105. //获取上下迭代器equal_range
  106. std::pair<MAP_ITERATOR, MAP_ITERATOR> pair2 = c2.equal_range(6) ;
  107. std::cout << "using c2.equal_range(6),first map element with key > 6 = " ;
  108. print_map_item(pair2.second) ;
  109. std::cout << "using c2.equal_range(6), first map element with key = 6 = " ;
  110. print_map_item(pair2.first) ;
  111. //采用count进行元素统计
  112. std::cout << "does c2 contain an element with key 8 ?" << std::endl ;
  113. if(c2.count(8) == 1)
  114. { std::cout << "c2 contains element with key 8" << std::endl ; }
  115. else
  116. { std::cout << "c2 does not contain element with key 8" << std::endl ; }
  117. //采用erase删除元素
  118. c2.erase(c2.begin()) ;
  119. std::cout << "first key/data pair of c2 is: " ;
  120. print_map_item(c2.begin()) ;
  121. c1.erase(c1.begin(), c1.end()) ;
  122. std::cout << "after c1.erase(c1.begin(), c2.end()), number of elements in c1 = "
  123. << c1.size() << std::endl ;
  124. if(c2.erase(8) == 1)
  125. { std::cout << "element with key 8 in c2 was erased" << std::endl ; }
  126. else
  127. { std::cout << "c2 does not contain any element with key 8" << std::endl ; }
  128. return 0 ;
  129. }