C++ STL中的unordered_map end()函数
在C++标准库中的STL(Standard Template Library)中,unordered_map是一个非常重要的容器,它的作用类似于map,可以快速地存储和查找键值对。而在unordered_map中,end()函数是一个非常重要的函数,本文将深入探讨unordered_map中的end()函数的相关内容。
unordered_map的概述
unordered_map是C++的STL库中的一个关联容器,和map比较类似,都是用于存储键值对的容器,但它们的实现方式不同。unordered_map使用哈希表来存储键值对,因此插入、查询、删除的时间复杂度都是O(1)。unordered_map中的元素是无序的,如果需要有序,那么推荐使用map。
unordered_map的声明方式如下:
unordered_map<string, int> mymap;
上述代码声明了一个名为mymap的unordered_map,用于存储字符串(键)和整数(值)的对应关系。也可以使用别名的方式来声明,如下:
using MyMap = unordered_map<string, int>;
MyMap mymap;
unordered_map的end()函数
在unordered_map中,end()函数返回一个指向容器最后一个元素之后的迭代器。如果unordered_map为空,那么end()函数返回的是指向容器中没有元素的位置的迭代器。在使用unordered_map的时候,往往需要用到begin()和end()函数来进行遍历,下面是一个简单的例子:
unordered_map<string, int> mymap;
mymap.insert(make_pair("张三", 18));
mymap.insert(make_pair("李四", 20));
mymap.insert(make_pair("王五", 22));
for (auto it = mymap.begin(); it != mymap.end(); ++it) {
cout << it->first << " : " << it->second << endl;
}
上述代码中,通过insert函数插入了三组键值对,然后使用begin()和end()函数进行了遍历。由于元素是无序的,每次输出结果可能是不同的。
end()函数的使用
在unordered_map中,end()函数通常用来判断遍历是否结束。通常情况下,我们需要通过遍历unordered_map来查找某个元素,判断的方法是通过遍历整个unordered_map查找和目标元素相同的键值对。当遍历到end()位置时,即可判断目标元素是否存在。
以下是一个简单的例子,用于查找键为”李四”的元素是否存在:
unordered_map<string, int> mymap;
mymap.insert(make_pair("张三", 18));
mymap.insert(make_pair("李四", 20));
mymap.insert(make_pair("王五", 22));
auto it = mymap.find("李四");
if (it != mymap.end()) {
cout << "键值对(" << it->first << "," << it->second << ")存在" << endl;
} else {
cout << "键值对(" << "李四" << "," << "?" << ")不存在" << endl;
}
上述代码使用了find函数查找键为”李四”的元素是否存在。如果存在,就输出对应的键值对,否则输出”键值对(李四,?)不存在”。在查找过程中,是否已经遍历到了unordered_map的末尾,即是否到了end()位置,是判断是否查找到元素的一个关键。
程序示例
下面是一个简单的程序示例,展示了unordered_map end()函数的使用方法:
#include <iostream>
#include <unordered_map>
using namespace std;
int main()
{
unordered_map<string, int> mymap;
mymap["张三"] = 18;
mymap["李四"] = 20;
mymap["王五"] = 22;
cout << "遍历unordered_map:" << endl;
for (auto it = mymap.begin(); it != mymap.end(); ++it) {
cout << it->first << " : " << it->second << endl;
}
cout << "查找键值对:" << endl;
auto it = mymap.find("李四");
if (it != mymap.end()) {
cout << "键值对(" << it->first << "," << it->second << ")存在" << endl;
} else {
cout << "键值对(" << "李四" << "," << "?" << ")不存在" << endl;
}
return 0;
}
程序首先插入了三组键值对,然后使用begin()和end()函数进行了遍历,并使用find函数查找键为”李四”的元素是否存在。
结论
unordered_map是一个非常重要的容器,在实际开发中广泛应用。end()函数是unordered_map中的一个重要函数,用于返回指向容器最后一个元素之后的迭代器。在实际开发中,我们可以通过遍历整个unordered_map来查找某个元素,并通过判断迭代器是否到达end()位置来判断查找是否结束。由于unordered_map中元素是无序的,因此每次遍历的结果可能是不同的,因此在使用unordered_map的时候应该注意这一点。