C++从两个迭代器创建列表对
C++ creating a list pair from two iterators
我有两个迭代器和一个包含对元素字符串和size_t的列表我想做的是将我的student_id和成绩添加到结果列表中。
在您的解释并添加一些内容之后,我认为您的错误在于使用std::string::compare
.我已经测试了以下代码(避免使用addRegister
,因为未定义Transcript
):
#include <iostream>
#include <list>
#include <algorithm>
typedef struct Records_r {
std::string name; // Name of the records
std::string student_id;
std::list<std::pair<std::string, size_t>> grades; // List of (course, grade) pairs
} Records;
typedef std::list<std::pair<std::string, size_t>>::const_iterator Personaliteraattori;
std::list<std::pair<std::string, size_t>> findCourseResults(const std::list<Records>& registry, const std::string& course) {
std::list<std::pair<std::string, size_t>> results;
for (std::list<Records>::const_iterator it = registry.begin(); it != registry.end(); ++it) {
for (Personaliteraattori itt = it->grades.begin(); itt != it->grades.end(); ++itt) {
if (itt->first.compare(course) == 0) {
results.push_back(std::make_pair(it->student_id, itt->second));
}
}
}
return results;
}
int main()
{
std::string s = "Record of student_123456";
std::string id = "123456";
std::list<std::pair<std::string, size_t>> grades;
grades.emplace_back("Math", 2);
grades.emplace_back("Basic Math", 4);
grades.emplace_back("Advanced Math", 5);
grades.emplace_back("Math 1", 3);
Records t;
t.name = s;
t.student_id = id;
t.grades = grades;
std::list<Records> reg;
reg.push_back(t);
t.name = "Record of student_34567";
t.student_id = "34567";
t.grades.clear();
t.grades.push_back(std::pair<std::string,size_t>("Math",1));
t.grades.push_back(std::pair<std::string,size_t>("Catalan",5));
t.grades.push_back(std::pair<std::string,size_t>("Basic Math",9));
reg.push_back(t);
for (auto& tr : reg ) {
std::cout << "Name: " << tr.name << std::endl;
std::cout << "Student id: " << tr.student_id << std::endl;
std::cout << "Grades:" << std::endl;
std::for_each(tr.grades.begin(), tr.grades.end(), [](std::pair<std::string, size_t> e)
{
std::cout << e.first << " : " << e.second << std::endl;
});
}
while(true){
std::cout<<"Enter a lecture: ";
std::string lecture;
std::getline(std::cin, lecture);
std::list<std::pair<std::string, size_t>> results = findCourseResults(reg,lecture);
for (auto& tr: results)
{
std::cout<<"StudentId: "<<tr.first<<" grades: "<<tr.second<<std::endl;
}
}
return 0;
}
请注意我如何使用std::string::compare
功能。此代码生成所需的输出:
Name: Record of student_123456
Student id: 123456
Grades:
Math : 2
Basic Math : 4
Advanced Math : 5
Math 1 : 3
Name: Record of student_34567
Student id: 34567
Grades:
Math : 1
Catalan : 5
Basic Math : 9
Enter a lecture: Math
StudentId: 123456 grades: 2
StudentId: 34567 grades: 1
Enter a lecture: Catalan
StudentId: 34567 grades: 5
相关文章:
- 使用std::multimap迭代器创建std::list
- 如何在创建自定义迭代器时获得 std::p air 的第一个和第二个?
- 如何创建迭代器函数
- C++ 为 costum 类创建一个 const 迭代器
- 创建可以遍历 std::map 值的通用模板迭代器的最简单方法是什么?
- 创建一个简单的前向迭代器,该迭代器在循环缓冲区的"end"处自动换行
- 创建以向量/列表迭代器为键的映射
- 是否可以创建虚拟迭代器类?
- 在多个 STL 对对象上创建迭代器
- 为结构的向量创建C 矢量迭代器
- C 使用默认限制的迭代器创建一个空的std :: String
- 有没有办法创建一个花哨的迭代器和相应的新数组,以便检查每个索引的索引值的条件?
- 我正在尝试使用矢量迭代器创建一个 for 循环
- 从实现 operator[] 的类自动创建迭代器
- 为矩阵创建动态数组,以循环迭代器命名
- 创建库以覆盖迭代器的操作员*() - 风险悬挂指针
- 创建不存储value_type的输入迭代器
- 为 map<T1、T2> 迭代器创建模板函数
- C++从两个迭代器创建列表对
- C++从模板迭代器创建向量