如何使用C++按索引访问集合中的元素
集合是C++标准模板库(STL)中提供的容器。它们用于在预定的序列中保存不同的元素;基本上,它的原理与二叉搜索树相同。
在C ++中,可以向集合中添加或删除元素,但存储在其中后便不能修改,因为它们的值变为常数。以下是在C++ STL中按索引访问集合中元素的可用方法:
- 通过在集合中迭代访问元素。
- 使用next()函数访问特定索引处的元素。
- 使用advance()函数访问特定索引处的元素。
- 通过创建通用方法从任何集合中访问第n个元素。
1. 遍历集合
这是通过索引访问集合中任何元素的最常见方法。在此方法中,我们将使用for循环遍历集合并访问任何元素。要访问第n个索引,我们将为给定的集合初始化一个迭代器,然后迭代n次以到达第n个索引。
示例:
// C++ program to access
// element by index in set.
#include <bits/stdc++.h>
using namespace std;
int main()
{
set<int> s;
// Inserting values in set
s.insert(10);
s.insert(20);
s.insert(30);
s.insert(40);
s.insert(50);
// Index(considering 0 as starting index)
int n=3;
// Initializing iterator
auto it = s.begin();
// Traversing the iterator till
// nth index
for(int i=0;i<n;i++)
{
it++;
}
// Printing the element at index n
cout<<*it;
return 0;
}
输出
40
2. 使用next()函数
访问任何索引处的元素的另一种方法是使用next()函数。这种方法类似于前一个方法,只是我们直接使用next()函数而不是使用循环进行迭代。
语法:
iterator_name = next(ForwardIterator it,n)
这里,it是指向集合开头的迭代器,n是需要迭代的次数。现在我们可以通过迭代器使用*iterator_name访问元素。
示例:
// C++ program to access
// element by index in set.
#include <bits/stdc++.h>
using namespace std;
int main()
{
set<int> s;
// Inserting values in set
s.insert(10);
s.insert(20);
s.insert(30);
s.insert(40);
s.insert(50);
// Index(considering 0 as starting index)
int n=3;
// Initializing iterator and
// iterating n times
// using next() function
auto it = next(s.begin(), n);
// Printing the element at index n
cout<<*it;
return 0;
}
输出
40
3. 使用advance()函数
访问任何索引处的元素的另一种方法是使用advance()函数。在此方法中,迭代器被赋予一个值,以使其前进。
语法:
advance(it, n);
这里,it是指向集合开头的迭代器,n表示迭代次数。我们可以使用*it访问元素。
示例:
// C++程序,通过索引在集合中访问元素。
#include <bits/stdc++.h>
using namespace std;
int main()
{
set<int> s;
// 插入元素
s.insert(10);
s.insert(20);
s.insert(30);
s.insert(40);
s.insert(50);
// 索引
int n=3;
// 初始化迭代器
auto it = s.begin();
// 使用advance函数访问第n个索引
advance(it,n);
// 打印第n个索引的元素
cout<<*it;
return 0;
}
输出
40
4. 访问第n个元素的通用方法
为了访问集合中的第n个元素,我们可以创建一个通用方法。在该方法中,我们将返回两个值,即第n个元素是否存在的布尔值,如果存在,则该元素的值是多少?
例子:
// C++程序,通过索引在集合中访问元素。
#include <bits/stdc++.h>
using namespace std;
template <typename T>
pair<T, bool> get_nth_element(set<T>& set_name, int index)
{
pair<T, bool> val;
if (set_name.size() > index) {
auto it = next(set_name.begin(), index);
val.first = *it;
val.second = true;
}
else
val.second = false;
return val;
}
int main()
{
set<int> s;
// 插入元素
s.insert(10);
s.insert(20);
s.insert(30);
s.insert(40);
s.insert(50);
// 索引
int n = 3;
// 访问第n个元素并将其返回到名为final的对中。
pair<int, bool> final = get_nth_element(s, n);
if (final.second == true)
cout << final.first;
else
cout << "集合中不存在第n个元素。";
return 0;
}
输出
40