std::getline
およびstd::istringstream
その他のいくつかの標準ライブラリ機能を使用して実行できます。
class Assignment
{
// ...
public:
friend std::istream& operator>>(std::istream& is, Assignment& assignment)
{
std::string line;
std::getline(is, line);
std::istringstream iss(line);
iss >> assignment.Assignment_type;
iss >> assignment.Date;
iss >> assignment.Max_score;
iss >> assignment.Actual_score;
// The last field is a little difficult, as it should get the rest
// of the line, which can include spaces, and the `>>` operator
// separates on spaces
// Get the rest using `getline`
std::getline(iss, assignment.Assignment_name);
return is;
}
};
今、あなたは例えばすることができます
std::ifstream input_file("data.txt");
Assignment assignment;
input_file >> assignment;
参考文献:
Assigment
他の部分については、新しく読み取ったオブジェクトを のようなコレクションに入れる必要がありますstd::vector
。次に、std::sort
必要に応じてそれらを並べ替えることができます。
std::vector<Assignment> assignments;
std::ifstream input_file("data.txt");
Assignment assignment;
while (input_file >> assignment)
assignments.push_back(assignment);
std::sort(std::begin(assignments), std::end(assignments));
関数を機能させるには、割り当てにstd::sort
a を実装する必要があります。operator<
class Assignment
{
// ...
public:
friend bool operator<(const Assignment& a, const Assignment& b)
{
return a.Assignment_name < b.Assignment_name;
}
};
C++11 (またはそれ以上) と互換性のあるコンパイラを使用している場合は、次の呼び出し時にラムダ式を使用できます ( Wikipediaも参照) std::sort
。
std::sort(std::begin(assignments), std::end(assignments),
[](const Assignment& a, const Assignment& b)
{
return a.Assignment_name < b.Assignment_name;
});
参考文献: