如何使用C++按索引访问集合中的元素

如何使用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

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程