C++ map

原文链接

原文链接

初始化

构造空容器

	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);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值