C++:向量的向量

6
我需要创建一个向量的向量(确切地说是三个向量的向量)。每个组成部分的向量都是不同的数据类型(字符串、双精度和自定义数据类型)。在C++中是否可以实现这一点?如果不行,有没有其他更优雅的方法来满足我的需求?

2
你打算用它们做什么? - user2100815
有时候我看到有人创建三个向量,而不是一个具有三个属性的结构体向量。这是你的情况吗? :) - Messa
4个回答

14

如果您知道它们有三个,而且您知道它们的类型,为什么不编写一个类呢?

class Data
{
    std::vector<std::string> _strings;
    std::vector<double> _doubles;
    std::vector<UserDefined> _userDefined;
public:
    // ...
};

在我看来,一堆不相关的东西组成的向量似乎缺乏明确的语义,所以这种写法也会增强语义。


1
如果您不喜欢像@Etienne建议的那样创建一个类,您可以创建一个std::vector< boost::tuples<std::string, double, YourType> >。如果您没有安装boost(http://www.boost.org/doc/libs/1_46_0/libs/tuple/doc/tuple_users_guide.html),则在最近的C++标准库中支持`tuples`,位于`tr1`命名空间下(http://msdn.microsoft.com/en-us/library/bb982771.aspx)。 - yasouser

3
template<typename T> struct inner_vectors {
    std::vector<double> double_vector;
    std::vector<std::string> string_vector;
    std::vector<T> user_vector;
};

std::vector<inner_vectors<some_type>> vector_of_vectors;

1
在我看来,结构体或类是最好的选择,也是最优雅的解决方案。

0

你是指这个吗?

vector<tuple<vector<string>, vector<double>, vector<T> > >

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接