как указать компаратор std::map

306
10 января 2018, 18:48

Хотел создать переменную типа map<string, vector<string>>, но чтобы пары в словаре хранились не по возрастанию, а в порядке добавления в словарь. Полагаю, для этого нужно при создании указать компаратор или написать свой. Только как это сделать для map я не нашел, а копаясь в коде map ничего не понял. Помогите, пожалуйста.

Answer 1
class BusStop
{
public:
    BusStop()
    {}
    BusStop(BusStop & new_bus)
    {
        this->data = new_bus.data;
    }
    vector<string> & operator[] (string stop)
    {
        for (auto &i : data)
        {
            if (i.first == stop)
                return i.second;
        }
        pair <string, vector <string>> d{ stop, {} };
        data.push_back(d);
        return data.back().second;
    }
    const vector<string> & at(string stop) const 
    {
        for (auto &i : data)
        {
            if (i.first == stop)
                return i.second;
        }
        throw runtime_error("element not found!");
    }
    int count(string stop) const
    {
        int count = 0;
        for (auto &i : data)
        {
            if (i.first == stop) count++;
        }
        return count;
    }
    size_t size() const 
    {
        return data.size();
    }
    auto begin() const 
    {
        return data.begin();
    }
    auto end() const
    {
        return data.end();
    }
    vector<pair<string, vector<string>>> data;
};

В результате сделал вот такой класс. Для того чтобы итерироваться по объекту класса определили begin() end(). остальное переопределил как в map. Стало работать как и задумывалось.

READ ALSO
Составление СЛАУ

Составление СЛАУ

Ребят, помогите разобратьсяПытаюсь составить систему уравнений, чтобы можно было решить методом Гаусса

170
Правильная компиляция зависимостей в Qt

Правильная компиляция зависимостей в Qt

Написал приложение и скомпилировал егоПопытался запустить из QtCreator все нормально

242
Получение содержимого ListView другого окна

Получение содержимого ListView другого окна

Задача состоит в получении содержимого элемента ListView другого окнаОднако, данный код приводит к критическому завершению работы процесса...

200
Проблема реализации класса матрицы C++

Проблема реализации класса матрицы C++

Учу классы и решил реализовать старую программу через классыНо возникла ошибка и не могу разобраться в чем дело

179