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
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已经被清空" <