我有一个逗号分隔的文件,扩展名为.csv,条件如下:
30,Movies,53808-0776,278,65.75
31,Beauty,48951-8130,725,83.42
32,Baby,59779-224,848,82
33,Industrial,55711-070,753,46.48
34,Industrial,76446-002,272,89.03
35,Sports,68151-2870,185,2.86
36,Toys,0245-0709,783,45.65
37,Games,49999-963,523,93.65
38,Beauty,52125-508,500,2.38
39,Toys,54092-381,783,45.65
40,Beauty,55154-6649,666,79.52
41,Jewelry,57664-327,46,10.28
42,Grocery,49738-453,317,29
我需要我的程序做的是接收这种格式的任何通用文件,删除重复项,然后创建一个没有重复项的相同扩展名的新文件。用户键入文件的确切位置。我正在使用一个类来保存单个数据记录。这是我到目前为止我的标题。
#ifndef RECORD_H_
#define RECORD_H_
#include <iostream>
class Record {
public:
// Constructor
std::Record(string department, string item_code, int quantity, double cost);
// Deconstructor
virtual ~Record();
// Overloaded '==' and '<' Comparision Methods
friend bool operator ==(const Record &a, const Record &b);
friend bool operator <(const Record&, const Record&);
// Overloaded '<<' Operator
friend std::ostream& operator <<(std::ostream&, const Record&);
// Private Member Functions
private:
std::string department;
std::string item_code;
int quantity;
double cost;
};
#endif /* RECORD_H_ */
文件都很小,所以简单的排序方法有效。我对这些方面很困惑。我是否在源代码中将对象存储在向量中,或者我是否需要为此创建定义?另外,如果我接收一个文件,如何让程序在同一个扩展名中创建一个新文件? (的.csv)
答案 0 :(得分:0)
假设您的问题中描述的Record
类具有已定义的operator==
,并且您有一个这样的向量,您可以从csv文件读入内存,您可以执行以下操作:使用算法库删除重复项:
std::vector<Record> records; // full of Record
// rearranges the vector, moving all the unique elements to the front
// and duplicates to the back
// last is an iterator to beginning of the duplicates
auto last = std::unique(records.begin(), records.end());
// erase all duplicates
records.erase(last, records.end());
注意std::unique
将使用operator==
中定义的Record
。