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

STL

开发平台:

C/C++

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