C++ 排序算法问题-模板

C++ 排序算法问题-模板,c++,C++,我有一类书,我正在尝试在打印书之前按任何参数对书进行分类 这些书可以放在任何容器里 当我在没有合并行的情况下运行程序时,合并行工作正常,但当我离开她时,问题会出现: “|错误:首先分配只读位置”。gnu\U cxx::\uuuuu正常\u迭代器::运算符*>>()| 它把我带到了课堂上:stl_algo.h 有人能帮我吗 operator std::string() const { int counter = books.size(); if(co

我有一类书,我正在尝试在打印书之前按任何参数对书进行分类

这些书可以放在任何容器里

当我在没有合并行的情况下运行程序时,合并行工作正常,但当我离开她时,问题会出现:

“|错误:首先分配只读位置”gnu\U cxx::\uuuuu正常\u迭代器::运算符*>>()|

它把我带到了课堂上: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 
运算符std::string()常量
{
int counter=books.size();
如果(计数器==0)
std::cout getTitle()getTitle())
返回false;
其他的
。 .


}您没有显示
书籍的定义,但我假定它是实现
运算符std::string
std::sort
修改排序序列的任何类的成员。因为您使用
常量
限定符声明了此运算符,
是常量,所有成员也是常量,因此不能使用
std::sort
书籍进行排序

你可以:

  • (不推荐)从
    操作符std::string
    中删除
    常量
    ,但是如果使用隐式转换来修改转换后的对象,则会导致您在其他地方编写一个微妙的bug,我几乎可以保证

  • 书籍的内容
    复制到另一个声明为局部变量的序列中。对副本进行排序

  • (我的选择)将排序与转换分离。将排序移到未标记为
    const
    的单独函数中

  • books
    更改为另一个隐式排序的容器类型,例如
    std::set
    。当然,这还有其他含义,但如果您希望它始终排序,这可能是正确的答案


  • 这是一个完整的错误吗,在构建日志中不再出现?它发生在源代码的哪一行?在排序行中:std::sort(books.begin(),books.end(),Compare_as_books());作为旁注,我会在这里更改设计,使排序只处理排序,并生成另一种输出结果的方法。您能给容器签名吗