C++ 给定结构中任何类型的向量

C++ 给定结构中任何类型的向量,c++,struct,C++,Struct,有没有办法创建给定结构的任何类型的向量 struct STUDENCI { int indeks; string imie; string nazwisko; }; struct PRZEDMIOTY { int id; string nazwa; int semestr; }; struct SALE { string nazwa; int rozmiar; bool projektor;

有没有办法创建给定结构的任何类型的向量

struct STUDENCI
{
    int indeks;
    string imie;
    string nazwisko;
};

struct PRZEDMIOTY
{
    int id;
    string nazwa;   
    int semestr;    
};

struct SALE
{
    string nazwa;
    int rozmiar;    
    bool projektor;
    double powierzchnia;
};

    vector<ANY TYPE FROM STUDENCI, PRZEDMIOTY, SALE> TAB[3];
结构研究 { int indeks; 串亚胺; 纳兹维斯科; }; 结构PRZEDMITY { int-id; 串纳兹瓦; int semestr; }; 结构性销售 { 串纳兹瓦; 内罗兹米尔; 布尔projektor; 双粉刺; }; 向量表[3];
您可以使用boost(www.boost.org)的变体库:


您可以使用boost(www.boost.org)中的变体库:


这就是工会的作用,有关此主题的更多信息,请参阅参考资料:

这就是工会的作用,有关该主题的更多信息,请参阅参考资料:


@0x499602D2我添加了一个示例无法打开include文件boost/variant.hpp/@用户3050705您需要在您的系统上安装。这是学校实验室的一个项目,所以我不能这样做。IIRC VARAAINT是唯一的标题,就像大多数boost一样。@0x499602D2我添加了一个示例无法打开include文件boost/variant.hpp/@你需要在你的系统上安装用户3050705。这是学校实验室的项目,所以我不能这么做。IIRC varaiant是唯一的标题,就像大多数boost一样。我认为这是一个很好的例子。我很确定你实际上不需要3种不同类型的向量。看起来你在不必要地使事情复杂化。我在另一个向量中有结构的名称(数据库表名称)。通过解析这个向量,我能够找到给定表名的索引。这就是为什么我希望数据容器(上面列出的结构)也在vector中。通过这种方式,我可以通过向量索引获得特定的容器(结构)。@user3050705:至少乍一看,听起来您可能想要一个
std::map
(或
std::unordered_map
)。我建议您将一些变量名翻译成英语。我知道这听起来有点紧,但有些事情告诉我,这可能有助于我们理解你们想要达到的目标,让我们面对现实吧,英语现在是一种相当主流的语言。我认为这是一个强有力的例子。我很确定你实际上不需要3种不同类型的向量。看起来你在不必要地使事情复杂化。我在另一个向量中有结构的名称(数据库表名称)。通过解析这个向量,我能够找到给定表名的索引。这就是为什么我希望数据容器(上面列出的结构)也在vector中。通过这种方式,我可以通过向量索引获得特定的容器(结构)。@user3050705:至少乍一看,听起来您可能想要一个
std::map
(或
std::unordered_map
)。我建议您将一些变量名翻译成英语。我知道这听起来有点紧,但有些事情告诉我,这可能会帮助我们理解你想要达到的目标,让我们面对现实吧,英语现在是一种相当主流的语言。请不要告诉初学者写作。工会是UB的快车道,特别是当用户不知道UB是什么的时候。大家都同意,工会是个糟糕的主意。他们有地方,但那不是这里。变体是一个更好的解决方案。@sehe:我同意在这种情况下,变体更好。我对你的答案投了赞成票。请不要告诉初学者写工会。工会是UB的快车道,特别是当用户不知道UB是什么的时候。大家都同意,工会是个糟糕的主意。他们有地方,但那不是这里。变体是一个更好的解决方案。@sehe:我同意在这种情况下,变体更好。我对你的答案投了赞成票。
std::vector<boost::variant<STUDENCI, PRZEDMIOTY, SALE> > v;
#include <boost/variant.hpp>
#include <iostream>
#include <string>
#include <vector>

using std::string;

struct STUDENCI
{
    int indeks;
    string imie;
    string nazwisko;
    friend std::ostream& operator << (std::ostream& os, STUDENCI const& v) {
        return os << "STUDENCI { " << v.indeks << ", " << v.imie << ", " << v.nazwisko << " }";
    }
};

struct PRZEDMIOTY
{
    int id;
    string nazwa;   
    int semestr;    
    friend std::ostream& operator << (std::ostream& os, PRZEDMIOTY const& v) {
        return os << "PRZEDMIOTY { " << v.id << ", " << v.nazwa << ", " << v.semestr << " }";
    }
};

struct SALE
{
    string nazwa;
    int rozmiar;    
    bool projektor;
    double powierzchnia;
    friend std::ostream& operator << (std::ostream& os, SALE const& v) {
        return os << "SALE { " << v.nazwa << ", " << v.rozmiar << ", " 
                  << std::boolalpha << v.projektor << ", " << v.powierzchnia << " }";
    }
};

typedef std::vector<boost::variant<STUDENCI, PRZEDMIOTY, SALE> > Vector;

int main()
{
    Vector v;
    v.push_back(STUDENCI { 1, "imie", "nazwisko" });
    v.push_back(PRZEDMIOTY { 1, "eng101", 3 });
    v.push_back(SALE { "auditorium", 42, true, 250 });

    for (auto& element: v)
        std::cout << element << "\n";
}
STUDENCI { 1, imie, nazwisko }
PRZEDMIOTY { 1, eng101, 3 }
SALE { auditorium, 42, true, 250 }