带你详细了解C++中的map(键值对)和set(集合)

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等,可以更灵活高效地存储数据。

后端开发标签