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

时间:2011-10-15 21:02:49

标签: c++ sorting vector

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

#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_o​​bject.get_sec_ele()会返回向量中的第二个元素。但是,编译器给出了一个巨大的错误消息:“从此处实例化”。可能是什么问题?

3 个答案:

答案 0 :(得分:7)

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

myvec声明为:

vector<int> myvec;

答案 1 :(得分:5)

您已将矢量定义为const;这使它在初始化后不可变。如果你打算对矢量进行排序,你需要取消它的构造,或者制作一个副本来排序(当然,如果你打算不止一次这样做,这将很慢)。

答案 2 :(得分:2)

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

  • 通过从声明
  • 中删除const关键字,使向量非常量
  • 首先制作矢量副本并对副本进行排序
  • std::vector替换为std::multiset,这将使项目按照排序顺序开始。