2013-05-10 4 views
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.

Однако я пытаюсь создать таблицу из трех различных типов. Первый столбец будет строкой, второй будет ints, а третий будет удваиваться.

Вывод этой таблицы будет выглядеть как этот

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

ответ

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; 
} 
2

Если ваш компилятор поддерживает C++ 11, вы можете использовать vectortuple из S:

#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> для компиляции индексации.

2

Я бы предложил инкапсулировать данные в класс и вместо jsut использовать вектор этого класса.

(вероятно, не будет компилироваться как есть)

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); 

Это гораздо удобнее работать с так как теперь, когда вам нужно распечатать свою коллекцию вы только Перебор один набор объектов и вы не не нужно беспокоиться об индексировании или доступе к сложному вектору векторов или кортежей.

Смежные вопросы