使用自定义函数对象比较器c ++设置

时间:2011-05-09 18:03:03

标签: c++

我有一个文件,在它的第一行是英文字母,按照随机顺序,然后是名字。我应该根据给出的字母对名称进行排序。我的班级看起来像这样:

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块之外是不可见的。我想不出其他的东西,不过...... 请指教。

2 个答案:

答案 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();
}
相关问题