排序算法问题 - 模板

时间:2015-05-27 14:38:07

标签: c++

我有一类书,在打印书籍之前,我试图在任何参数中整理书籍。

书籍放在任何容器中。

当我运行程序时没有合并线正常工作,但当我离开她时,问题就出现了:

" |错误:首先分配只读位置' gnu_cxx :: __ normal_iterator< _Iterator,_Container> :: operator *>> ()|

它带我上课:stl_algo.h

任何人都可以帮助我!?

    operator std::string() const
    {
        int counter = books.size();
        if(counter == 0)
            std::cout << "Empty Book List." ;
         std::string s;
         std::string s1;
         std::stringstream oss1;                                 
         oss1 << counter;
         s1 = "There are " + oss1.str() + " in the list." ;
         std::cout << s1 << "\n";
         /** Sorting the List by the requests **/
         std::sort(books.begin(), books.end(), Compare_as_books());
         std::for_each(books.begin(),books.end(), String1(s));
         return s;
    }



class Compare_as_books {
public:
     Compare_as_books() {}
     bool operator() ( const Book* b1, const Book* b2)
    {
      if(b1->getTitle() > b2->getTitle())
            return true;
        if(b1->getTitle() < b2->getTitle())
            return false;
        else 

。 。

}

1 个答案:

答案 0 :(得分:2)

您没有显示books的定义,但我认为它是实现operator std::string的任何类的成员。 std::sort修改正在排序的序列。因为您使用const限定符声明了此运算符,this是const,所有成员都是const,因此books无法使用std::sort进行排序。

你可以:

  1. (不推荐)从const删除operator std::string,但是通过隐式转换来修改转换后的对象会导致你在其他地方写一个微妙的bug,我会几乎保证。

  2. books的内容复制到另一个声明为局部变量的序列中。改为对副本进行排序。

  3. (我的选择)从转换中分离出排序。将排序移动到未标记为const的单独函数中。

  4. books更改为另一种隐式排序的容器类型,例如std::set。这有其他含义,当然,你想要它总是排序这可能是正确的答案。