基本上,我想要带有链接列表的哈希表,它存储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
}}
^
答案 0 :(得分:1)
在
cout << i->second->get<1> << endl;
i
是std::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;