【问题标题】:C++ How to print and (access) tuples of vectors (in a map)? [duplicate]C ++如何打印和(访问)向量元组(在地图中)? [复制]
【发布时间】:2015-01-14 12:45:55
【问题描述】:

我想要一个向量元组,例如 {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;
}

如何打印我的地图以及如何访问其中的元组?

编辑:我知道如何遍历地图,但不知道如何打印向量元组。

【问题讨论】:

  • 既然它们都是同一种类型,为什么不用一个 array 向量呢?它比元组更容易使用。
  • 检查打印部分(很容易适应):stackoverflow.com/questions/14070940/c-printing-out-map-values
  • ...这个成员函数将通过索引访问一个元组:cplusplus.com/reference/map/map/operator[]。要访问第一个元组,*(m.begin())。
  • 谢谢。我已经知道如何遍历地图。更大的问题是如何打印向量元组。我发现打印元组的所有内容都是元组,如 tuple 或类似的。
  • @Jette 好吧,没有自动方法来打印向量元组,如果那是你所追求的(就像没有自动打印向量一样,或元组)。您必须自己打印它们 - 可能依次访问元组的每个元素并以您需要的任何方式打印向量。

标签: c++ vector map tuples


【解决方案1】:

如果您使用的是 C++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);
}

【讨论】:

  • 更好const TUPLE&amp; t = element.second;
  • 谢谢,这很有帮助!但是我怎样才能打印元组并分别访问三个向量呢?
  • @Jette 您只是在寻找std::get&lt;&gt;() 吗? (注意:我不喜欢链接到 cplusplus,但显然 cppreference 没有 std::get 条目)。
  • @Angew:是的,确实如此。 en.cppreference.com/w/cpp/utility/tuple/get
  • @bitmask 嗯,没有出现在搜索结果中(我在非会员部分完全忽略了它)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-09-20
  • 2018-11-01
  • 2021-12-28
  • 1970-01-01
  • 1970-01-01
  • 2022-01-14
相关资源
最近更新 更多