在C ++ STL中的unordered_multimap begin()和end()函数
C++ STL的unordered_multimap是一种关联式容器,它允许存储多个相同键的元素。在实际应用中,我们可能需要遍历unordered_multimap容器中存储的每一个元素。C++ STL提供了begin()和end()函数来实现遍历unordered_multimap容器。
begin()函数
unordered_multimap中的begin()函数返回指向第一个元素的迭代器,该迭代器指向的元素可以通过解引用操作符获取,例如:
#include <iostream>
#include <unordered_map>
using namespace std;
int main()
{
unordered_multimap<string, int> mymap = {{"apple", 10}, {"banana", 20}, {"apple", 30}};
unordered_multimap<string, int>::iterator it = mymap.begin();
cout << "The first element's key-value pair is: " << it->first << " : " << it->second << endl;
return 0;
}
输出:
The first element's key-value pair is: apple : 10
在上面的示例中,我们定义了一个unordered_multimap容器,并使用begin()函数返回一个迭代器指向第一个元素。我们通过解引用操作符获取到了第一个元素的key值和value值,并将其打印出来。
需要注意的是,begin()函数返回的是一个迭代器类型的指针,因此也可以使用auto关键字来定义迭代器指针,例如:
auto it = mymap.begin();
end()函数
unordered_multimap中的end()函数返回一个指向容器末尾的迭代器(也就是说,返回的迭代器并不指向实际的元素),我们可以将其与begin()函数返回的迭代器一起使用来实现遍历unordered_multimap容器中的所有元素,例如:
#include <iostream>
#include <unordered_map>
using namespace std;
int main()
{
unordered_multimap<string, int> mymap = {{"apple", 10}, {"banana", 20}, {"apple", 30}};
for (unordered_multimap<string, int>::iterator it = mymap.begin(); it != mymap.end(); ++it)
{
cout << it->first << " : " << it->second << endl;
}
return 0;
}
输出:
apple : 10
apple : 30
banana : 20
在上面的示例中,我们使用for循环和迭代器遍历unordered_multimap容器中的所有元素,并通过解引用操作符获取到每个元素的key值和value值进行打印。
需要注意的是,end()函数返回的迭代器并不指向实际的元素,因此我们在判断迭代器不等于end()时,应该使用!=而不是<。如果使用<来判断,可能会导致遍历未完成或重复遍历某些元素。
结论
unordered_multimap容器是一种允许存储多个相同键的元素的关联式容器。在遍历容器中的元素时,begin()函数可以返回一个指向第一个元素的迭代器,end()函数可以返回一个指向容器末尾的迭代器。通过这两个函数的使用,我们可以遍历unordered_multimap容器中的所有元素,从而实现容器的遍历操作。