接前一篇文章:C++常用容器、函数、类集(8)
在C++常用容器、函数、类集(1)-优快云博客中讲了std::map及其一般用法。
std::map是C++标准模板库(STL)中的关联容器,基于红黑树实现,存储键值对且按键自动排序,提供O(log n)时间复杂度的查找、插入和删除操作。
#include <iostream>
using namespace std;
#include <map>
#include <string>
int main() {
map<int, string> students = { {1, "Alice"}, {2, "Bob"}, {3, "Charlie"} };
if (students.find(2) != students.end()) {
cout << "找到 ID 2: " << students[2] << endl;
}
else {
cout << "ID 2 不存在" << endl;
}
system("pause");
return 0;
}
本回来看一个常用的但较为特殊的用法:second。
前边已讲过,std::map是一个关联容器,存储的元素是键值对(key-value pair)。其中每个键(key)都映射到一个值(value)。如果要访问或修改一个std::map中某个键对应的值,可以使用second成员。second成员是一个指向存储在std::map中值的迭代器,它返回一个引用,可以通过此引用来读取或修改相应的值。
下边是一个简单的代码示例,演示如何使用std::map和second:
#include <iostream>
#include <map>
int main() {
std::map<std::string, int> my_map;
//添加一些键值对到map中
my_map["apple"] = 1;
my_map["banana"] = 2;
my_map["orange"] = 3;
my_map["pear"] = 4;
//访问并打印一个键对应的值
std::cout << "苹果的数量:" << my_map["apple"] << std::endl;
std::cout << "香蕉的数量:" << my_map["banana"] << std::endl;
//修改一个键对应的值
my_map["banana"] = 5;
//遍历map并打印所有键值对
for (const auto& pair: my_map) {
std::cout << "键:"<<pair.first << ",值:" << pair.second << std::endl;
}
return 0;
}
在这段示例代码中:
1)首先创建了一个名为my_map的std::map,其中键(key)是字符串类型,代表的是水果的名称;值(value)是整数类型,代表的是对应类的水果的数量;
2)然后,使用[]运算符将一些键值对添加到my_map中;
3)之后,使用second成员来访问和修改键对应的值;
4)最后,使用for循环遍历整个my_app,并打印所有的键值对。
为什么能用secode和first访问键值对?别忘了前文书也讲过的std::pair。
std::pair是C++标准模板库(STL)提供的一个容器,它能够存储两个不同类型的数据作为一个整体,其中first访问pair的第一个元素。second访问pair的第二个元素。
代码示例如下:
#include <iostream>
using namespace std;
#include <utility>
#include <string>
int main()
{
pair<string, int> p;
//通过构造函数参数列表初始化
p = make_pair("张三", 18);
cout << p.first << p.second << endl;//打印结果 张三18
// 初始化的时候赋值
pair<string, int> pname("张三", 18);
cout << pname.first << pname.second << endl;//打印结果 张三18
return 0;
}
而std::map中存储的是键值对(key-value pair),从名字上就能看出来,键值对也是对(pair),因此能够使用first(访问键)和second(访问值)。
总结一下:
在C++的STL中,std::map是一种关联容器,它允许你通过键值对来存储和检索元素。每个键值对由一个键(key)和一个值(value)组成。为了访问std::map中元素的first成员(即键部分)和second成员(即值部分),需要先获取到对应的键值对,然后再访问其second成员。
std::map内部使用红黑树来维护键值对的排序,每个元素都是一个键值对,可以表示为std::pair<const Key, T>,其中Key是键的类型,T是值的类型。
更多内容请看下回。