STL map,插入和查找的一些注意事项

01、前言(废话)

C++ 的 std::map 容器中插入键值对主要有myMap(std::make_pair(key value)) ,它们的区别你了解吗?

auto it = myMap,find(key) 和 auto value = myMap[key] 都可以用于在 C++ 的 std::map 容器中查找键对应的值,但是如果auto value = myMap[key]的key不存在时会有什么问题呢?

下文就详细介绍它们的区别

02、插入

C++ 插入主要有:myMap[key] = valuemyMap(std::make_pair(key,value))

  • myMap[key] = value是通过使用提来访问和修改映射中的值,如果键不存在,则会创建一个新的键值对,并将值插入到映射中,如果键已经存在,则会更新对应的值。
  • myMap(std::make_pair(key value))是通过使用 std:pair 来插入键值对,这种式可以在创建键值对的同时进行初始化,并将其插入到映射中,如果键已经存在,则不会进行更新操作
	map<int, string> myMap;
	myMap.insert(std::make_pair(10,"abc"));
	myMap.insert(std::make_pair(10, "abcd"));
	cout << myMap[10] << endl;
	
	
	myMap[11] = "123";
	cout << myMap[11] << endl;
	myMap[11] = "1234";
	cout << myMap[11] << endl;

运行结果

abc
123
1234

可以看到,调用inset方法时,若果该key已经存在,不会更新该key的值,在调用insert函数的时候需要注意。

03、查看

C++ 的 std::map 容器中查找键对应的值注意是auto it = myMap.find(key)auto value = myMap[key]

  • auto it = myMap,find(key)使用 find 函数来查找键对应的值,如果键存在,则回一个指向该键值对的法代器,如果键不存在,则返回 myMap.end()。
  • auto value = myMap[key] 使用健来直接访问和获取对应的值,如果键存在,则返回对应的值;如果键不存在,则会创建一个新的键值对,并将默认值插入到映射中.
map<int, int> myMap1;
myMap1[2] = 2;
cout <<"myMap1 size = "<< myMap1.size() << endl;
int val1 = myMap1[1];
cout << "val1 = " << val1 << "; myMap1 size = " << myMap1.size() << "; myMap1[2] = " << myMap1[2] << endl;
cout << "-------------------------------------" << endl;

map<int, int> myMap2;
myMap2[22] = 22;
cout << "myMap2 size = " << myMap2.size() << endl;
auto it1 = myMap2.find(11);
auto it2 = myMap2.find(22);
if (it1 == myMap2.end())
    cout << "myMap2 not find 11" << endl;
if (it2 != myMap2.end())
    cout << "key = " << it2->first << "; value = " << it2->second << endl;
cout << "myMap2 size = " << myMap2.size() << endl;

运行结果

myMap1 size = 1
val1 = 0; myMap1 size = 2; myMap1[2] = 2
-------------------------------------
myMap2 size = 1
myMap2 not find 11
key = 22; value = 22
myMap2 size = 1

注意:使用 myMap[key] 时,如果健的类型是自定义类型,需要确保该类型已经实现了合适的默认构造函数,以便在键不存在时能够插入默认值.

你可能感兴趣的:(C++,#,STL,c++,c语言,开发语言)