在C++ STL中使用unordered_multiset begin()函数
在C++ STL中,unordered_multiset
是一个容器,类似于set
但允许重复元素。使用begin()
函数可以返回一个指向容器第一个元素的迭代器。在本文中,我们将探讨如何使用begin()
函数来迭代unordered_multiset
容器中的元素。
我们先来看一个示例代码:
#include <iostream>
#include <unordered_set>
int main() {
std::unordered_multiset<int> myMultiset = {1, 2, 3, 4, 5};
std::unordered_multiset<int>::iterator it;
for (it = myMultiset.begin(); it != myMultiset.end(); ++it) {
std::cout << *it << " ";
}
return 0;
}
这里创建了一个unordered_multiset
容器,并将一些整数添加到容器中。然后使用begin()
函数获取指向第一个元素的迭代器,并使用循环迭代容器中的所有元素。
当运行上述代码时,输出将是:
5 4 3 2 1
这是因为unordered_multiset
容器不会按照元素添加的顺序存储元素,而是根据哈希函数对元素进行排序。这就是为什么迭代器在输出时的顺序出现了反转。
在以下示例代码中,我们演示了使用begin()
函数获取指向容器中第一个元素之后,更改特定元素的值:
#include <iostream>
#include <unordered_set>
int main() {
std::unordered_multiset<int> myMultiset = {1, 2, 3, 4, 5};
std::unordered_multiset<int>::iterator it = myMultiset.begin();
it++; // advance the iterator to the second element
*it = 10;
for (auto& i : myMultiset) {
std::cout << i << " ";
}
return 0;
}
在这个示例中,我们将迭代器it
向前移动一个元素,并将该元素的值更改为10。然后,使用for
循环输出整个unordered_multiset
容器中的值。
输出结果将是:
5 10 4 3 2 1
我们可以看到已修改第二个元素的值,而其他元素的值保持不变。
接下来,让我们看一个更高级的示例,这个示例使用返回引用的begin()
函数。该示例使用find()
函数查找特定的元素,并将其改为新的值:
#include <iostream>
#include <unordered_set>
int main() {
std::unordered_multiset<int> myMultiset = {1, 2, 3, 4, 5};
*(myMultiset.begin()) = 10;
auto it = myMultiset.find(3);
*it = 30;
for (auto& i : myMultiset) {
std::cout << i << " ";
}
return 0;
}
在这个示例中,我们首先将第一个元素的值改为10,然后使用find()
函数找到值为3的元素,并将其值改为30。我们使用auto
关键字来自动推断返回类型,以及使用解引用运算符*
来修改选定的元素。
输出结果将是:
10 30 4 2 5 1
我们可以看到,第一个元素的值已经改为了10,并且选定元素的值已经改为了30。
结论
在C++ STL中,unordered_multiset
容器提供了begin()
函数来获取指向第一个元素的迭代器,我们可以使用该函数来迭代容器中的元素。通过简单的修改,我们可以更改unordered_multiset
容器中的元素的值。在高级示例中,可以使用find()
函数来查找特定的元素,并使用返回引用的begin()
函数来获取该元素的迭代器,以便更改其值。掌握了begin()
函数的使用方法,我们可以更好地操作unordered_multiset
容器中的元素。
总之,begin()
函数是C++ STL中一个常用的函数,可以帮助我们快速访问容器中的元素,并在需要时修改元素的值。希望本文中的示例代码能够对您有所帮助。