Как использовать сортировку для сортировки вектора в классе - PullRequest
0 голосов
/ 16 октября 2011

Мне было интересно, как я могу использовать функцию сортировки для сортировки частного вектора в классе:

#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 () вернет второй элемент в векторе.Тем не менее, компилятор выдает огромное сообщение об ошибке: «экземпляр отсюда».В чем может быть проблема?

Ответы [ 3 ]

7 голосов
/ 16 октября 2011

Вы объявили myvec как const - как вы ожидаете изменить его?

Объявите myvec как:

vector<int> myvec;
5 голосов
/ 16 октября 2011

Вы определили свой вектор как const; это делает его неизменным после инициализации. Если вы намереваетесь отсортировать вектор, вам нужно будет отменить его или сделать копию для сортировки (что, конечно, будет медленным, если вы собираетесь делать это более одного раза).

2 голосов
/ 16 октября 2011

Вы объявили переменную-член myvec как const, но std::sort должен изменить вектор для его сортировки.Вы можете:

  • Сделать вектор неконстантным, удалив ключевое слово const из его объявления
  • Сначала создайте копию вектора и отсортируйте копию
  • замените std::vector на std::multiset, что позволит сохранить элементы в отсортированном порядке для начала.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...