0

我知道要创建一个多维向量,您需要像这样编写它

std::vector< std::vector <int> > name;
std::vector<int> firstVector;
firstVector.push_back(10);
numbers.push_back(thisVector);
std::cout << numbers[0][0]

输出为 10。

但是我正在尝试创建三种不同类型的表。第一列是字符串,第二列是整数,第三列是双精度数。

该表的输出看起来像这样

One     200    5.1%
Three    10    1.4%
Nine   5000   10.8%
4

3 回答 3

2

我不确定我是否遵循了您的解释,但听起来您真正想要的是结构向量:

struct whatever { 
    std::string first; // The first column will be a string
    int second;        // ...the second would be ints
    double third;      // ...and the third would be doubles.
};

std::vector<whatever> data;

就您的输出而言,您将定义一个operator<<来处理它:

std::ostream &operator<<(std::ostream &os, whatever const &w) { 
     os << std::setw(10) << w.first 
        << std::setw(5) << w.second 
        << std::setw(9) << w.third;
     return os;
}
于 2013-05-10T00:33:31.340 回答
2

如果你的编译器支持 C++11,你可以使用 a vectorof tuples:

#include <vector>
#include <tuple>
#include <string>

int main()
{
    std::vector<std::tuple<std::string, int, double>> var;

    var.emplace_back("One", 200, 5.1);
    var.emplace_back("Three", 10, 1.4);
    var.emplace_back("Nine", 5000, 10.8);
}

用于std::get<N>编译时索引。

于 2013-05-10T00:33:38.750 回答
2

我建议将数据封装到一个类中,而不是使用该类的向量。

(可能不会按原样编译)

class MyData 
{
public:
    std::string col1;
    int col2;
    double col3;
};

...
std::vector<MyData> myData;
MyData data1;
data1.col1 = "One";
data1.col2 = 10;
data1.col3 = 5.1
myData.push_back(data1);

这使用起来更加方便,因为现在当您需要打印出您的集合时,您只需遍历一组对象,您无需担心索引或访问向量或元组的复杂向量。

于 2013-05-10T00:33:59.763 回答