C ++ Как распечатать и (получить доступ) кортежи векторов (в карте)? [Дубликат]

0

Я хочу иметь кортеж векторов, что-то вроде {1,2,3,4}, {5,6}, {7,8,9}. Причина, в которой я нуждаюсь в этом, - это то, что я знаю априори, сколько векторов мне нужно, но не так, как долго они будут. Поэтому я подумал, что это лучший способ сделать это. Кроме того, в конце я хочу сохранить их на карте, потому что мне нужно несколько из этих кортежей позже, и я могу получить к ним доступ по индексу.

Для начала я подумал о чем-то вроде:

#include <vector>
#include <tuple>
#include <iostream>
#include <map>

using namespace std;

typedef vector<int> VECTOR;
typedef tuple<VECTOR, VECTOR, VECTOR> TUPLE;
typedef map<int, TUPLE> MAP;

int main()
{
    MAP m;
    VECTOR v1, v2, v3;
    TUPLE t;

    v1 = { 1, 2, 3, 4 };
    v2 = { 5, 6 };
    v3 = { 7, 8, 9 };

    t = make_tuple(v1, v2, v3);

    m.insert(pair<int, TUPLE>(1, t));

    return 0;
}

Как распечатать мою карту и как я могу получить доступ к кортежу в ней?

EDIT: Я знаю, как перемещаться по карте, но не как печатать кортеж векторов.

  • 1
    Поскольку все они одного типа, почему бы не использовать массив векторов? С ним будет легче работать, чем с кортежем.
  • 0
    Проверьте это для печатной части (легко адаптируется): stackoverflow.com/questions/14070940/c-printing-out-map-values
Показать ещё 3 комментария
Теги:
vector
tuples
map

1 ответ

1

Если вы используете С++ 11, вы можете сделать следующее

for (auto element : m)  // iterate over map elements
{
    int key = element.first;
    TUPLE const& t = element.second;  // Here is your tuple

    VECTOR const& v1 = std::get<0>(t); // Here are your vectors
    VECTOR const& v2 = std::get<1>(t);
    VECTOR const& v3 = std::get<2>(t);
}
  • 1
    лучше const TUPLE& t = element.second;
  • 0
    Спасибо, это полезно! Но как я могу распечатать кортеж и получить доступ к трем векторам по отдельности?
Показать ещё 4 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню