1. 什么是map?
在C++中,map是一种存储键值对数据结构,也被称为关联数组或字典。它以键值对的形式存储数据,其中键是唯一的,以便查找和访问相应的值。
使用map可以方便地实现“将键映射到值”的操作,类似于Python中的字典和Java中的HashMap。
1.1 map的定义
在C++中,可以使用STL(标准模板库)来使用map,需要包含头文件map
。定义map的语法如下:
// 定义一个空map
map <key_type, value_type> my_map;
// 示例:定义一个存储string类型作为键,int类型作为值的map
map <string, int> my_map;
上述语句定义了一个空map,其中key_type
表示键的类型,value_type
表示值的类型。
在实际使用中,需要使用insert()函数向map中添加元素,使用find()函数查找某个键对应的值,使用erase()函数移除某个键值对,使用size()函数获取map的大小等操作,下面将逐一进行介绍。
2. 如何使用map?
2.1 插入元素
向map中插入键值对可以使用insert()函数,示例代码如下:
#include <map>
#include <iostream>
using namespace std;
int main()
{
map <string, int> my_map;
// 向map中插入元素,使用insert函数
my_map.insert(pair <string, int>("apple", 10));
my_map.insert(pair <string, int>("banana", 5));
// 遍历map并输出
map <string, int> :: iterator it;
for (it = my_map.begin(); it != my_map.end(); it++)
{
cout << it->first << " : " << it->second << endl;
}
return 0;
}
输出结果如下:
apple : 10
banana : 5
在上面的代码中,首先定义了一个空map,然后使用insert()函数插入两个键值对“apple:10”和“banana:5”,最后使用迭代器(iterator)遍历整个map并输出结果。
2.2 查找元素
使用find()函数查找map中某个键对应的值,示例如下:
#include <map>
#include <iostream>
using namespace std;
int main()
{
map <string, int> my_map;
my_map.insert(pair <string, int>("apple", 10));
my_map.insert(pair <string, int>("banana", 5));
// 查找map中键为"apple"的值
map <string, int> :: iterator it;
it = my_map.find("apple");
if (it != my_map.end())
{
cout << it->first << " : " << it->second << endl;
}
else
{
cout << "apple not found" << endl;
}
return 0;
}
输出结果如下:
apple : 10
在上面的代码中,使用find()函数查找键为“apple”的值,如果找到则输出值,否则输出“apple not found”。
2.3 移除元素
使用erase()函数可以移除map中某个键值对,示例如下:
#include <map>
#include <iostream>
using namespace std;
int main()
{
map <string, int> my_map;
my_map.insert(pair <string, int>("apple", 10));
my_map.insert(pair <string, int>("banana", 5));
// 移除键为"apple"的值
my_map.erase("apple");
// 遍历map并输出
map <string, int> :: iterator it;
for (it = my_map.begin(); it != my_map.end(); it++)
{
cout << it->first << " : " << it->second << endl;
}
return 0;
}
输出结果如下:
banana : 5
在上面的代码中,先使用insert()函数向map中插入两个键值对,然后使用erase()函数移除键为“apple”的值,最后使用迭代器遍历map并输出结果。
2.4 获取map的大小
使用size()函数可以获取map的大小,示例如下:
#include <map>
#include <iostream>
using namespace std;
int main()
{
map <string, int> my_map;
my_map.insert(pair <string, int>("apple", 10));
my_map.insert(pair <string, int>("banana", 5));
// 输出map的大小
cout << "map size:" << my_map.size() << endl;
return 0;
}
输出结果如下:
map size:2
在上面的代码中,使用size()函数输出map的大小。
3. 什么是set?
set是C++中一种集合(set)数据结构,它可以方便地存储数据并且自动排序。
和map一样,set也使用STL来实现。使用set,可以轻松地实现一些不重复元素的操作,例如查找、插入、删除、排序等。
3.1 set的定义
使用set需要包含头文件set
。定义set的语法如下:
// 定义一个空set
set <value_type> my_set;
// 示例:定义一个存储int类型的set
set <int> my_set;
上述语句定义了一个空set,其中value_type
表示值的类型。
4. 如何使用set?
4.1 插入元素
和map一样,使用insert()函数可以向set中插入元素。
#include <set>
#include <iostream>
using namespace std;
int main()
{
set <int> my_set;
// 插入元素
my_set.insert(10);
my_set.insert(5);
my_set.insert(20);
// 遍历set并输出
set <int> :: iterator it;
for (it = my_set.begin(); it != my_set.end(); it++)
{
cout << *it << " ";
}
cout << endl;
return 0;
}
输出结果如下:
5 10 20
在上面的代码中,使用insert()函数插入三个元素到set中,最后遍历set并输出结果。
4.2 查找元素
使用find()函数可以查找set中是否存在某个元素。
#include <set>
#include <iostream>
using namespace std;
int main()
{
set <int> my_set;
my_set.insert(10);
my_set.insert(5);
my_set.insert(20);
// 查找set中是否存在元素10
set <int> :: iterator it;
it = my_set.find(10);
if (it != my_set.end())
{
cout << "10 found" << endl;
}
else
{
cout << "10 not found" << endl;
}
return 0;
}
输出结果如下:
10 found
从上面的语句可以看出,find()函数返回一个迭代器,如果找到则指向对应元素的迭代器,否则指向set的末尾迭代器。
4.3 移除元素
使用erase()函数可以移除set中某个元素。
#include <set>
#include <iostream>
using namespace std;
int main()
{
set <int> my_set;
my_set.insert(10);
my_set.insert(5);
my_set.insert(20);
// 移除元素5
my_set.erase(5);
// 遍历set并输出
set <int> :: iterator it;
for (it = my_set.begin(); it != my_set.end(); it++)
{
cout << *it << " ";
}
cout << endl;
return 0;
}
输出结果如下:
10 20
在上面的代码中,使用erase()函数移除元素5,最后遍历set并输出结果。
4.4 获取set的大小
使用size()函数可以获取set的大小。
#include <set>
#include <iostream>
using namespace std;
int main()
{
set <int> my_set;
my_set.insert(10);
my_set.insert(5);
my_set.insert(20);
// 输出set的大小
cout << "set size:" << my_set.size() << endl;
return 0;
}
输出结果如下:
set size:3
使用set同样也可以实现队列、栈等数据结构,更多使用方式可以参考C++ STL库的官方文档。
5. 总结
本文主要介绍了C++中两种重要的数据结构map和set。map可以存储键值对数据,可以用来存储一些元素之间的关系,set可以存储不重复的元素并自动排序。在使用map和set时,需要注意迭代器的使用,它们可以用来遍历整个数据结构并实现各种操作。同时,在新的C++标准中,还有其他新的数据结构,例如unordered_map和unordered_set等,可以更灵活高效地存储数据。