我有一个文件,在它的第一行是英文字母,按照随机顺序,然后是名字。我应该根据给出的字母对名称进行排序。我的班级看起来像这样:
class MyCompare(){
private:
static map<char, int> order;
public:
MyCompare(string alphabet){
//loop through the string, assign character to it's index in the map
// order[ alphabet[i] ] = i;
}
bool operator()(const string s1, const string s2) {
//compare every character using compchar, return the result
}
bool compchar(const char c1, const char c2){
return order[c1]<order[c2];
}
}
在主要方面,我做了类似的事情:
int i=0;
if (myfile.is_open()) {
while ( myfile.good() ) {
i++;
getline (myfile,line);
if(i ==1){
MyCompare st(line);
set<string, MyCompare> words(st);
}
words.insert(line);
}
myfile.close();
}
当然,这不起作用,因为该集在if块之外是不可见的。我想不出其他的东西,不过...... 请指教。
答案 0 :(得分:5)
阅读第一行,然后创建你的设置,然后进入循环。
if (myfile.is_open()) {
getline (myfile,line);
MyCompare st(line);
set<string, MyCompare> words(st);
while (getline(myfile,line)) {
words.insert(line);
}
myfile.close();
// use words here
}
答案 1 :(得分:0)
可能不是您问题的答案,但在控制循环时,您几乎不应测试流状态位。你想要:
if (myfile.is_open()) {
while ( getline (myfile,line) ) {
i++;
if(i ==1){
MyCompare st(line);
set<string, MyCompare> words(st);
}
words.insert(line);
}
myfile.close();
}