C++ STL中的unordered_map.cend函数
在C++语言中,STL(Standard Template Library)是一个被广泛使用的程序库,其中包含了一些常用的数据结构和算法。其中,unordered_map是一个非常实用的哈希表容器,它可以将数据类(key)映射到值类(value)上。在unordered_map中,我们可以使用许多函数进行容器的操作,其中cend()函数就是其中之一。
unordered_map容器简介
unordered_map是一个哈希表容器,它在存储数据方面具有十分快速和高效的优势。该容器会为数据类(key)分配桶,每个桶中会存放一组数据和对应的键值对(key-value pair)。在存储数据时,unordered_map会对数据类进行哈希,并根据哈希的值将其放入相应的桶中。而在查询数据时,它只需要对查询的数据同样进行哈希并在相应的桶中查询即可,不需要遍历整个容器。
unordered_map容器的使用方法和其他STL容器类似,可以使用类模板和模板类型参数定义容器,并通过构造函数进行初始化。因为是使用模板定义的,实际上unordered_map容器可以存储任意类型的数据。下面是一个基本的unordered_map容器定义和初始化示例:
#include <iostream>
#include <unordered_map>
using namespace std;
int main()
{
unordered_map<string, int> umap {{"one",1}, {"two", 2}, {"three", 3}};
cout << umap["one"] << endl;
return 0;
}
在上述代码中,我们使用了unordered_map<string, int>定义了一个包含三个元素的unordered_map容器umap,并且对其进行了初始化。
cend()函数介绍
cend()函数是unordered_map中的一个函数,它返回的是指向容器所存储元素末尾(最后一个元素的下一个位置)的迭代器。通过该迭代器,我们可以轻松遍历整个unordered_map容器。
语法如下:
const_iterator cend() const;
在语法中,const_iterator是unordered_map容器中的迭代器类,该类型声明了指向不可变的元素的指针。在unordered_map容器中,cend()函数返回的迭代器是指向不可变的元素的指针。
使用cend()函数的示例如下:
#include <iostream>
#include <unordered_map>
using namespace std;
int main()
{
unordered_map<string, int> umap {{"one",1}, {"two", 2}, {"three", 3}};
for(auto i=umap.begin(); i!=umap.cend(); i++)
{
cout << i->first << " : " << i->second << endl;
}
return 0;
}
在上述代码中,我们使用了cend()函数来遍历整个unordered_map容器umap,并输出所有元素的键和值。这里注意到,使用cend()函数期间,我们使用了const_iterator类型的迭代器变量i进行遍历操作。
示例代码
以下是一些使用cend()函数的示例代码:
示例1
#include <iostream>
#include <unordered_map>
using namespace std;
int main()
{
unordered_map<string, int> umap {{"one",1}, {"two", 2}, {"three", 3}};
unordered_map<string, int>::iterator itr;
for (itr = umap.begin(); itr != umap.cend(); itr++)
{
cout << itr->first << " : " << itr->second << endl;
}
return 0 ;
}
输出结果为:
one : 1
two : 2
three : 3
在该示例代码中,我们创建了一个unordered_map容器umap,并通过迭代器遍历整个容器,输出了每个元素的键和值。
示例2
#include<iostream>
#include<unordered_map>
using namespace std;
int main()
{
unordered_map<int, string> umap{
{1, "hello"},
{2, "world"},
{3, "everyone"}
};
auto itr = umap.cbegin();
while(itr != umap.cend())
{
cout << itr->first << " " << itr->second << endl;
itr++;
}
return 0;
}
输出结果为:
1 hello
2 world
3 everyone
在该示例代码中,我们创建了一个键为int类型值为string类型的unordered_map容器umap,并使用迭代器遍历了整个容器,输出了每个元素的键值对。
示例3
#include <iostream>
#include <unordered_map>
using namespace std;
int main()
{
unordered_map<string, string> mymap = { {"Peter","Director"}, {"Ana", "Manager"}, {"Ela","Employee"}};
for(unordered_map<string, string>::const_iterator it = mymap.cbegin(); it != mymap.cend(); ++it )
{
cout << it->first << " => " << it->second << '\n';
}
return 0;
}
输出结果为:
Ana => Manager
Ela => Employee
Peter => Director
在该示例代码中,我们创建了一个字符串类型的unordered_map容器mymap,并使用const_iterator类型的迭代器输出容器的所有元素。
结论
通过使用cend()函数,我们可以轻松地遍历unordered_map容器中的所有元素。并且由于cend()返回的是指向不可变元素的指针,因此我们不会无意中修改容器中的元素。因此,cend()函数是STL中非常实用的函数之一,在我们使用unordered_map容器时应当充分利用。