使用元组

时间:2017-07-13 17:25:27

标签: c++ stl

基本上,我想要带有链接列表的哈希表,它存储3个int类型变量,所以我使用带有int和tuple的无序multimap。但它给我编译时错误我在做错了。还有其他任何有效的方式这样做。而且我想找到最后在桶中包含的所有列表中对b和c施加一些条件。为此我想使用stl min算法但我无法弄清楚如何发送第二和第三元组的数据作为lambda函数的参数。

#include <iostream>
#include <iterator>
#include <bits/stdc++.h>
#include <vector>
#include <tuple>
#include <algorithm>
#include <numeric>


using namespace std;

int main()
{

    std::unordered_multimap<int, std::tuple<int, int, int>> um;

    int t;
    cin >> t;
    while (t--)
    {
        int n, d;
        cin>>n>>d;
        for (int i = 0; i < n; ++i) {
            int a, b, c;
            cin >> a >> b >> c;
            um.insert(make_pair(a, std::make_tuple(a, b, c)));
        }
    }
    for (std::unordered_multimap<int, std::tuple<int, int, int>>::const_iterator i = um.begin(); i != um.end(); ++i) {
        cout << i->second->get<1> << endl;
    }
}

这是我刚试图打印值时的错误

main.cpp: In function 'int main()':
main.cpp:34:18: error: base operand of '->' has non-pointer type 'const             std::tuple'
cout<second ->get<1><main.cpp:35:3: error: expected declaration before    '}' token
}}
^

1 个答案:

答案 0 :(得分:1)

cout << i->second->get<1> << endl;

istd::unordered_multimap<int, std::tuple<int, int, int>>的迭代器。这意味着i->second会为您提供键/值对的std::tuple<int, int, int>部分。由于它不是指针,因此您不使用->来访问其成员,而是使用.

get不是std::tuple的成员函数。 std::get是一个全局函数,您将元组传递给它以获取其元素。这会让你的代码看起来像

std::cout << std::get<1>(i->second) << std::endl;