我想知道如何使用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_object.get_sec_ele()会返回向量中的第二个元素。但是,编译器给出了一个巨大的错误消息:“从此处实例化”。可能是什么问题?
答案 0 :(得分:7)
您将myvec
声明为const
- 您希望如何修改它?
将myvec
声明为:
vector<int> myvec;
答案 1 :(得分:5)
您已将矢量定义为const
;这使它在初始化后不可变。如果你打算对矢量进行排序,你需要取消它的构造,或者制作一个副本来排序(当然,如果你打算不止一次这样做,这将很慢)。
答案 2 :(得分:2)
您已将成员变量myvec
声明为const
,但std::sort
必须修改该向量以对其进行排序。你可以:
const
关键字,使向量非常量
std::vector
替换为std::multiset
,这将使项目按照排序顺序开始。