C++ 查找并处理std::变体列表中的备选方案

C++ 查找并处理std::变体列表中的备选方案,c++,c++17,C++,C++17,让我们有一个非常简单的元素模板: template <typename T> struct Element { int id; T value; }; 模板 结构元素 { int-id; T值; }; 以及一个模板函数,用于处理其中两个: template <typename T1, typename T2, typename R> R DoSomething(T1 const& t1, T2 const& t2) { ; //

让我们有一个非常简单的元素模板:

template <typename T>
struct Element
{
    int id;
    T value;
};
模板
结构元素
{
int-id;
T值;
};
以及一个模板函数,用于处理其中两个:

template <typename T1, typename T2, typename R>
R DoSomething(T1 const& t1, T2 const& t2)
{
    ; // do something with t1 and t2
}
模板
R剂量测量法(T1常数和T1,T2常数和T2)
{
;//用t1和t2做点什么
}
我需要同时存储不同的元素列表, 所以我定义了这些类型别名(以保持相同类型的向量) 在单独的列表中):

使用IntListT=std::list;
使用dblistt=std::list;
使用strlist=std::list;
要在单个类成员中保存所有元素,我使用以下映射:

using ListVariantT = std::variant<IntListT, DblListT, StrListT>;
std::map<std::type_index, ListVariantT> myElements;
使用listVariatt=std::variant;
地图髓质成分;
问题: 我的成员函数接收两个元素ID(当然是两个整数)。 如何找到两个请求的元素并将它们传递给DoSomething func

我绝对不会坚持将所有元素存储在单个映射中或使用std::variant。但由于性能原因,应保留(许多)不同向量中的存储元素

多谢大家

编辑:

  • 所有ID在所有
    元素中都是唯一的。所以ID明确地标识了一个元素

  • 类型之间操作的运算符和结果类型由系统设计给出(通过专门化类型
    元素
    的标准运算符),因此模板参数R在实际代码中毫无意义(仅用于说明和完整性)

  • std::访问在这里没有多大帮助。我需要找到(最终)不同类型的两个不同元素(或对它们的引用),然后将它们传递给DoSomething()函数

  • “绩效原因”很难不深入细节来解释。我有很多相同类型元素的不同齐次向量,我用不同的方式处理它们。通常是迭代和做一些数学/统计/转换等。现在我扩展了功能,以支持跨不同类型元素的操作。例如,如果我有
    元素的向量
    元素
    ,我应该能够将所有元素累积到
    元素
    的新向量中。或者,如果用户选择一个元素E1,另一个元素E2,将它们的ID传递给我,我应该能够找到它们并返回E1+E2,可能是E1*E2,等等


您能提供一个有效的解决方案吗?特别是,您还可以显示调用方代码吗?可能一开始就没有映射或变量。刚刚给出一个
std::list
,您打算如何高效地查找具有特定ID的元素?您熟悉吗?这就是它的目的。你能更具体地说明你的“性能原因”吗?那么我们可以假设传入的两个
int
s告诉你元素的类型(int/double/string)和
id
?呼叫站点是否知道它所期望的类型?
using ListVariantT = std::variant<IntListT, DblListT, StrListT>;
std::map<std::type_index, ListVariantT> myElements;