📜  如何在C++中找到Vector中给定元素的索引(1)

📅  最后修改于: 2023-12-03 15:24:27.356000             🧑  作者: Mango

如何在C++中找到Vector中给定元素的索引

在C++中,我们经常使用std::vector来存储数据。当我们需要根据元素的值来获取它的索引时,可以尝试使用以下方法。

方法一:使用std::find函数

std::find是C++ STL中的一个函数,可以在容器中查找给定的元素。它返回一个迭代器,指向容器中第一个与给定元素相等的元素,如果没有找到匹配的元素,返回容器的 end() 迭代器。

#include <algorithm>
#include <vector>

std::vector<int> nums {1, 2, 3, 4, 5};
int target = 3;

auto iter = std::find(nums.begin(), nums.end(), target);
if (iter != nums.end()) {
    // std::distance函数可以用来计算迭代器之间的距离,也就是索引值
    int index = std::distance(nums.begin(), iter);
    std::cout << "target index is " << index << std::endl;
} else {
    std::cout << "target not found" << std::endl;
}

上述代码中,我们使用了 std::distance 函数来计算迭代器之间的距离,即要查找的元素在vector中的索引值。

方法二:使用自定义查找函数

除了使用 std::find 函数,我们还可以使用自定义的查找函数来查找一个元素在vector中的索引值。

#include <vector>
#include <iostream>

template <typename T>
int index_of(std::vector<T>& nums, const T& target) {
    auto iter = std::find(nums.begin(), nums.end(), target);
    if (iter == nums.end()) {
        return -1;
    }
    return std::distance(nums.begin(), iter);
}

int main() {
    std::vector<int> nums = {1, 2, 3, 4, 5};
    int target = 3;
    int index = index_of(nums, target);
    if (index == -1) {
        std::cout << "target not found" << std::endl;
    } else {
        std::cout << "target index is " << index << std::endl;    
    }
}

上述代码中,我们定义了一个函数 index_of 来查找指定元素在vector中的索引值。此函数使用了 std::find 函数来查找元素,如果找到了,就将迭代器转换为索引值返回;如果查找失败,就返回-1。

方法三:使用STL算法

除了使用 std::find,STL中还有其他算法可以查找元素在vector中的索引值。比如,std::lower_boundstd::upper_bound 函数可以在有序的vector中快速查找目标元素。

#include <iostream>
#include <vector>
#include <algorithm>

int main() {
    std::vector<int> nums = {1, 2, 3, 4, 5};
    int target = 3;

    auto iter = std::lower_bound(nums.begin(), nums.end(), target);
    if (iter == nums.end() || *iter != target) {
        std::cout << "target not found" << std::endl;
        return 0;
    }

    int index = std::distance(nums.begin(), iter);
    std::cout << "target index is " << index << std::endl;
}

上述代码中,我们使用 std::lower_bound 函数来查找目标元素在有序vector中的位置,如果成功找到,就返回该元素的迭代器,并使用 std::distance 函数计算索引值。

结论

上述是三种在C++中查找vector中指定元素索引的方法。在实际情况中,我们可以根据情况选择不同的方法。需要注意的是,当vector中存在重复元素时,使用 std::find 函数可能无法正确返回目标元素的索引。