原文链接
初始化
构造空容器
map<uint16_t, string> map1;
列表初始化,构造, 排序递增
map<uint16_t, string, std::less<uint16_t>> map2{ { 1, "A" },{ 2, "B" },{ 3, "C" },{ 4, "D" },{ 5, "E" } };
列表初始化,构造, 排序递减
map<uint16_t, string, std::greater<uint16_t>> map6{ { 1, "A" },{ 2, "B" },{ 3, "C" },{ 4, "D" },{ 5, "E" } };
列表初始化,构造, 排序自定义
struct myCompare {
bool operator()(const int& k1, const int& k2) {
return k1 < k2;
}
};
map<uint16_t, string, myCompare> map7{ { 1, "A" },{ 2, "B" },{ 3, "C" },{ 4, "D" },{ 5, "E" } };
范围构造,排序递增
map<uint16_t, string, std::less<uint16_t>> map3(map2.begin(), map2.end());
范围构造,排序递减
map<uint16_t, string, std::greater<uint16_t>> map8(map2.begin(), map2.end());
拷贝构造,类型必须一致,包括排序,排序递增
map<uint16_t, string, std::less<uint16_t>> map4(map3);
拷贝构造,排序递增
map<uint16_t, string, std::greater<uint16_t>> map9(map8);
赋值构造,类型必须一致,包括排序,排序递增
map<uint16_t, string, std::less<uint16_t>> map10 = map4;
赋值构造,类型必须一致,包括排序,排序递减
map<uint16_t, string, std::greater<uint16_t>> map11 = map9;
注意
map在传时 必须注意map初始化时的排序类型,如果排序函数不一样,也会视作不同的类型
插入
用insert函數插入pair
map2.insert(pair<int, string>(000, "zero"));
用insert函数插入value_type数据
map2.insert(map<int, string>::value_type(001, "one"));
利用Key值插入值,如果没有该key则插入,如果已经存在该key则会更新value
map2[0] = "first";
判断值插入是否成功,如果成功Insert_Pair.second返回true,否则返回false
map<uint16_t, string, std::greater<uint16_t>>::iterator 如果插入成功,返回该数据的迭代器,如果失败,则返回相同key的迭代器
pair<map<uint16_t, string, std::greater<uint16_t>>::iterator, bool> Insert_Pair;
Insert_Pair = map2.insert(map<int, string>::value_type(001, "student_one"));
if (!Insert_Pair.second)
cout << "Error insert new element" << endl;
删除
利用迭代器删除,需要判断是否具备该key,如果没有则会崩溃
auto iter = map2.find(5);
if (iter != map2.end())
{
map2.erase(iter);
}
用key值删除数据,如果成功返回1,否则返回0
int n = map2.erase(1);
用迭代器范围刪除
map2.erase(map2.begin(), map2.end());
全部清空
map2.clear();
遍历
void CoutMap(map<uint16_t, string, std::greater<uint16_t>> map1)
{
for (auto i = map1.begin(); i != map1.end(); i++)
{
std::cout << i->first << " " << i->second<<std::endl;
}
}
查找
auto iter = map2.find(1);
if (iter != map2.end())
{
}
交换
map<uint16_t, string, std::greater<uint16_t>> map2 ;
map<uint16_t, string, std::greater<uint16_t>> map3;
map2.swap(map3);