问题描述
我正在阅读包含
的文件Johh,13,soccer,cricket
Mitchell,14,cricket
Michael,football,cricket,soccer
(all three in separate lines starting from names)
我创建了包含名称、年龄和最喜欢的运动的对象的类。是否可以在 C++ 中将年龄(最喜欢的运动)后的东西组合成一个对象,而不必编写最喜欢的运动 1、最喜欢的运动 2 等。 John 的示例可以是 student.getname() = john、student.getAge() = 13 和 student.getFavSport = Football,cricket。等
真的停留在这部分,从来没有教过,任何帮助将不胜感激谢谢
解决方法
有很多方法可以解决这个问题,因为有很多容器。您可以使用 std::vector
,并且有很多关于如何使用它们的教程。
对于这种情况,我建议使用 std::set
,它在标头 <set>
中定义。
用法:
#include <set>
#include <string>
struct Student { //I imagine your class looks like this
std::string name;
int age;
std::set<std::string> FavSports;
};
int main() {
Student MyStudent;
MyStudent.FavSports.insert("soccer"); //insert
MyStudent.FavSports.insert("cricket"); //insert
MyStudent.FavSports.insert("football"); //insert
bool Exists = MyStudent.FavSports.contains("soccer"); //also can use count() function,which returns 1 or 0. 0 for false,as none exist,1 for true,as one does exist,and a set can have a max of one item of a same type.
//Ex: a std::set can not contain two "cricket"s.
auto Iterator = MyStudent.FavSports.find("cricket"); //get a set iterator Iterator that points to cricket
std::string data = Iterator->data(); //get data of Iterator ("cricket")
++Iterator; //point to one forward
for (std::string Element : MyStudent.FavSports) { //for each element in FavSports
//do something with each element
}
MyStudent.FavSports.insert("football"); //already exists,does nothing
}
您可以根据自己的需要进行调整。更多信息:https://en.cppreference.com/w/cpp/container/set