如何使用sort对类中的向量进行排序

How to use sort to sort a vector in a class

本文关键字:向量 排序 何使用 sort      更新时间:2023-10-16

我想知道如何使用排序函数对类中的私有向量进行排序:

#include <iostream>
#include <string>
#include <vector>
#include <algorithm>

using namespace std;
class A{
private:
    const vector<int> myvec;
    A(vector<int>& vec) : myvec(vec) { }
public:
    const vector<int>& getvec() { return myvec; }
    int get_sec_element(){
        int sec_ele = 0;
        sort(myvec.begin(), myvec.end());
        sec_ele = myvec[2];
        return sec_ele;
    }
};

因此,如果我创建A myvec_object并将其填充为一个已经在其内部具有值的向量,则调用myvec_object.get_sec_ele()将返回向量中的第二个元素。然而,编译器给出了一个巨大的错误消息:"从这里实例化"。有什么问题吗?

您将myvec声明为const—您希望如何修改它?

声明myvec为:

vector<int> myvec;

您已将矢量定义为const;这使得它在初始化后不可变。如果您打算对vector进行排序,则需要对其取消const,或者复制一个来进行排序(当然,如果您打算多次执行此操作,则会很慢)。

您已经将成员变量myvec声明为const,但是std::sort必须修改向量才能对其进行排序。你可以:

  • 通过从其声明中删除const关键字使vector变为非const
  • 首先复制矢量并对副本进行排序
  • std::vector替换为std::multiset,这将保持项目的排序顺序。