map multimapc++_C++ STL - map 与 multimap用法和区别

1 #include

2 #include

3 #include

4 #include //std::sort

5

6

7 using namespacestd;8

9 //打印函数可写成模板10

11 //打印函数 printfA

12 void printfA(map, int>vec_)13 {14 for (std::map<:vector>, int>::iterator it = vec_.begin(); it != vec_.end(); it++)15 {16 std::cout << it->first[0] << " " << it->first[1] << " " << it->first[2] << " " << it->second <<:endl cout vec_.size>

21 //打印函数 printfB

22 void printfB(multimapvec_)23 {24 for (multimap::iterator it = vec_.begin(); it != vec_.end(); it++)25 {26 std::cout << it->first << " " << it->second <<:endl cout vec_.size>

31 intmain()32 {33 //声明,定义

34 std::mapm;35 m[3] = "h1";36 m[0] = "what";37 //构建 key-value

38 m.insert(std::pair(2, "love you"));39

40 std::cout << m[0].c_str() << std::endl;//这里数字 不是索引值了

41 std::cout << m[3].c_str() <<:endl std::cout m std::endl>

44

45 m[6] = string("slam2345");46 std::cout << m.size() << std::endl; //547 //遍历

48 for (std::map::iterator it = m.begin(); it != m.end(); it++)49 std::cout << it->first << "," << it->second.c_str() <<:endl>

51

52 std::vectorpointTemp;53 std::map<:vector>, int>vecA;54 for (int y = 0; y < 4; y++)55 {56 for (int x = 0; x < 4; x++)57 {58 pointTemp.push_back(y);59 pointTemp.push_back(x);60 pointTemp.push_back(x +y);61 //插入

62 vecA.insert(std::pair<:vector>, int>(pointTemp, (y * 4 + x + 1)));63 pointTemp.clear();64 }65 }66 printfA(vecA);67 //***************************************************************************************************68 //【注意】区分map与multimap:1、两者都会自动排序 2、multimap插入不会覆盖已有键值对(对于map若有相同key,则拒绝插入)69 //<1>插入返回值 判定是否插入成功70 //带插入数据

71 vector pointTemp_ = { 1,2,3 }; //Insert方法不能覆盖,如果键已经存在,则插入失败【注意插入位置,是自动排序】

72 int a1 = 4;73 //判定插入是否成功

74 pair< map, int>::iterator, bool> isInsertOK;//注意这里声明

75 isInsertOK = vecA.insert(pair, int>(pointTemp_, a1));76 cout << "插入成功?" << isInsertOK.second <

78 printfA(vecA);79

80 //***************************************************************************************************81 //<2>map对象的拷贝构造与赋值

82 map, int> vecB(vecA); //拷贝构造

83 map, int>vecC;84 vecC =vecA;85 vecC.swap(vecA);86 //***************************************************************************************************87 //<3>查找

88 mapvecD;89 //你以为按照下面初始化 vecD,他的size会是5? 由于insert方法不能覆盖,所以我们将map 改成 multimap

90 vecD.insert(pair((string)"china", 1));91 vecD.insert(pair((string)"china", 2));//拒绝插入

92 vecD.insert(pair((string)"china", 3));//拒绝插入

93 vecD.insert(pair((string)"english", 1));94 vecD.insert(pair((string)"english", 2));//拒绝插入

95

96 multimapvecE;97 vecE.insert(make_pair((string)"china", 1));98 vecE.insert(make_pair((string)"china", 1));//允许插入

99 vecE.insert(make_pair((string)"china", 3));//允许插入

100 vecE.insert(make_pair((string)"china", 4));//允许插入

101 vecE.insert(make_pair((string)"china", 5));//允许插入

102 vecE.insert(make_pair((string)"english", 1));103 vecE.insert(make_pair((string)"english", 2));//允许插入

104 vecE.insert(make_pair((string)"america", 1));105 vecE.insert(make_pair((string)"america", 2));//允许插入

106 vecE.insert(make_pair((string)"america", 3));//允许插入

107 cout << "multimap 初始化" <

111 multimap ::iterator it1 = vecE.lower_bound("china"); //指向vecD中第一个等于键值 “china”对应的元素

112 multimap ::iterator it2 = vecE.upper_bound("china"); //指向vecD中第一个大于键值 “china”对应的元素

113 cout << it1->first << " " << it1->second <first << " " << it2->second <

116 pair::iterator, multimap::iterator > it3 = vecE.equal_range("china");117 map::iterator it4 =it3.first;118 map::iterator it5 =it3.second;119

120 //查找key = “china”键值对的个数

121 int iCount = vecE.count("china");122

123 //查找key = “china”对应键值对

124 multimap::iterator it6 = vecE.find("china");125

126 //***************************************************************************************************127 //<4>删除

128 multimap::iterator itBegin =vecE.begin();129 //删除 vecE 前面三个元素 与 后面 三个元素130 //在改善特征点匹配算法中有实践

131 int index = 0;132 int vecA_size =vecE.size();133 //删除(自定义删除任何元素)

134 for (multimap::iterator it_ = vecE.begin(); it_ !=vecE.end(); )135 {136 //<1>法1137 //vecE.erase(it_++);138 //<2>法2

139 if ((0<=index)&&(index<=2))140 {141 it_ =vecE.erase(it_);//这样写,防止指针失效142 }143

144 else if (((vecA_size - 3) <= index) && (index <= (vecA_size - 1)))145 {146 it_ =vecE.erase(it_);147 }148 else

149 {150 it_++;151 }152 ++index;153 }154

155

156 //删除multimap中key = "english"的 所有 元素

157 vecE.erase("english");158 cout << "vecE删除key = english的 所有 元素" <

161 //删除所有元素

162 multimap::iterator itBegin_ =vecE.begin();163 multimap::iterator itEnd_ =vecE.end();164 vecE.erase(itBegin_, itEnd_);165 //bool isEmpty = vecE.empty();

166

167 if(vecE.empty())168 {169 cout << "vecE已经被清空" <

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值