如何遍历vector<tuple<string, string, int>> vec = [["nj", "hk", 5], ["hkj", "hkj", 6], ["hkj", "asd", 7]];中的元素
时间: 2023-11-13 17:53:42 浏览: 87
可以使用C++11中的范围for循环来遍历vector<tuple<string, string, int>>类型的vec,代码如下:
```
for(auto& t : vec) {
string s1 = get<0>(t);
string s2 = get<1>(t);
int num = get<2>(t);
// do something with s1, s2 and num
}
```
其中,auto& t表示对vec中的每个元素都进行遍历,get<0>(t)、get<1>(t)和get<2>(t)分别表示获取tuple中第1个、第2个和第3个元素。
相关问题
我有一个类型为JavaPairRDD<Integer, Iterable<Tuple3<Integer, String, Double>>> 的rdd,怎么通过结构转换,在不缺少数据的情况下,将结构转变为JavaPairRDD<Tuple2<Double, String>, Tuple2<Integer, Integer>> 类型
可以通过以下代码实现:
```java
JavaPairRDD<Tuple2<Double, String>, Tuple2<Integer, Integer>> resultRdd = rdd.flatMapToPair(
new PairFlatMapFunction<Tuple2<Integer, Iterable<Tuple3<Integer, String, Double>>>, Tuple2<Double, String>, Tuple2<Integer, Integer>>() {
@Override
public Iterator<Tuple2<Tuple2<Double, String>, Tuple2<Integer, Integer>>> call(Tuple2<Integer, Iterable<Tuple3<Integer, String, Double>>> input) throws Exception {
List<Tuple2<Tuple2<Double, String>, Tuple2<Integer, Integer>>> result = new ArrayList<>();
for (Tuple3<Integer, String, Double> tuple : input._2()) {
Tuple2<Tuple2<Double, String>, Tuple2<Integer, Integer>> newTuple = new Tuple2<>(
new Tuple2<>(tuple._3(), tuple._2()),
new Tuple2<>(input._1(), tuple._1())
);
result.add(newTuple);
}
return result.iterator();
}
}
);
```
首先使用 `flatMapToPair` 对每个元素进行迭代,将原来的 `JavaPairRDD<Integer, Iterable<Tuple3<Integer, String, Double>>>` 转换为 `JavaPairRDD<Tuple2<Double, String>, Tuple2<Integer, Integer>>`。
在迭代过程中,我们先遍历 `Iterable`,对于每个 `Tuple3<Integer, String, Double>`,创建一个新的 `Tuple2<Tuple2<Double, String>, Tuple2<Integer, Integer>>` 对象,并将原来的数据填入其中。最后将所有新生成的元素放入一个 `List` 中返回,最终返回这个 `List` 的迭代器。
最终得到的 `resultRdd` 就是转换后的结果。
//分析下面程序的功能。 #include <tuple> #include<string> #include <vector> #include<iostream> using namespace std; typedef tuple<string ,string ,int,string> Student; vector<Student> inputData() { Student stu; vector<Student>sv; for(int i=0;i<3 ;i++){ cout <<"输入学生数据:姓名、学号、年龄、专业"<< endl; cin >> get<0>(stu)>> get<1>(stu) >> get<2>(stu)>>get<3>(stu); sv.push_back(stu); } return sv; } void display(vector<Student> sv) { for(int j=0;j<3;j++){ cout << get<0>(sv[j])<< "\t" << get<1>(sv[j])<<"\t" << get<2>(sv[j])<<"\t" << get<3>(sv[j]) << endl; } } int main(){ vector<Student> s; s = inputData(); display(s); }
这段程序的功能是定义了一个名为Student的tuple类型,表示学生的姓名、学号、年龄和专业,并定义了一个向量vector类型的容器sv,用于存储多个学生信息。程序中的inputData函数用于从标准输入中读取3个学生信息,并将得到的每个学生信息存储在一个Student类型的对象stu中,最后将所有的学生信息存储在向量sv中,并返回向量sv。display函数用于显示向量中存储的所有学生信息。最后在主函数中调用inputData函数获取学生信息,然后调用display函数将学生信息打印出来。
阅读全文