如何获取变量向量中元素的索引?

问题描述 投票:0回答:1

vector<variant<T1,T2>> vec起,我有一个T1& elem,它在vec中。我想找到索引i,使得get<T1>(vec[i])elem

但是我不确定这是否合法:

auto const p = static_cast<std::variant<T1,T2> const*>(&elem); // 1
auto const i = static_cast<std::size_t>(p - vec.data()); // 2

我不确定// 1中的静态强制转换是否合法,即使holds_alternative<T1>(vec[i])成立。


编辑:从下面的讨论中,这个问题可以归结为:我如何以符合标准的方式来行1

c++ vector variant static-cast
1个回答
0
投票

不确定,如果我完全理解您的问题。

但是您可以使用std::find_ifstd::distance

要搜索的变量的类型可以通过decltype找到。

请参见下面的示例

#include <iostream>
#include <vector> 
#include <variant>
#include <algorithm>
#include <iterator>

int main() {

    // Some test data
    std::vector<std::variant<std::string, int>> vsoi{ "Str1", 1, 2, "Str2", 3, "Str4", "Str5", "Str6" };

    // Value to find:

    int thingToFind = 3;
    //std::string thingToFind = "Str1";

    // Get index
    size_t pos = std::distance(vsoi.begin(),
        std::find_if(vsoi.begin(), vsoi.end(), 
            [&thingToFind](std::variant<std::string, int>& si) {
                return ( std::holds_alternative<decltype(thingToFind)>(si) && 
                (std::get<decltype(thingToFind)>(si) == thingToFind)); }));

    // Show result
    std::cout << pos << "\n";
    return 0;
}
© www.soinside.com 2019 - 2024. All rights reserved.