vector < map, vector>

248
10 сентября 2018, 20:50
class goods {
    vector<pair< map <string,string>, vector<pair<int , int> >>> good;
public:
    virtual ~goods() = 0 {};
    void setGood(string manufacturer, string good, int day, int month, int year) {
        map <string, string> tmp;
        tmp.insert(manufacturer, good);
        //this->good.push_back(tmp, { day, month, year }, { day, month, year });
        this->good.push_back(make_pair(make_pair("key", "data"), make_pair(1, 2)));
    }

не могу добавить значение

Answer 1

Тип элемента вектора = pair<map<string, string>, vector<pair<int, int>>> Следовательно необходимо добавлять значение именно такого типа

map<string, string> first_value{ make_pair("key", "value") };
vector<pair<int, int>> second_value{ make_pair(1, 2) };
// обратите внимание, что здесь необходимо использовать скобки инициализации
// {}
good.push_back(make_pair(first_value, second_value));
Answer 2
class goods {
    vector< pair< map<string,string>, vector<int> > > good;
public:
    virtual ~goods() = 0;
    void setGood(const string& manufacturer,
                const string& g, int day, int month, int year) {
        map <string, string> tmp;
        tmp.insert(make_pair(manufacturer, g));
        good.push_back(make_pair(tmp, vector<int>{day, month, year}));
    } 
};

Перечислю ваши ошибки:

 virtual ~goods() = 0 {}; 

это чистый виртуальный деструктор, у которого не может быть тела (даже пустого). Так что уберите скобки.

tmp.insert(manufacturer, good);

std::map<string, string> содержит пары строк, а не две строки

Что касается архитектуры:

Если вы хотите в вектор ввести пару таблицы и даты, то вам нужен вектор пар таблиц и вектор с целыми типами, а не вектор пар. Вообше то, мне думается что вам нужно хранить в классе

vector< pair< pair<string,string>, vector<int> > > поскольку вы храните там одну пару с датой.

P.S. для читабельности и для того, чтобы избегать случайных ошибок, лучше избегать повторение имен. Или в аргументах или в приватном поле изменить имя гораздо проще, чем потом следить что есть что. Вообше то приватный член может иметь любое самое короткое имя(клиету класса она всеравно не нужна)

READ ALSO
Объявление массивов в С++

Объявление массивов в С++

Инициализация массива в Java:

241
Не устанавливается библиотека boost

Не устанавливается библиотека boost

Уже второй день пытаюсь установить библиотеку boost, никак не получается

275
Помогите исправить ошибку: use of undeclared identifier &#39;n&#39;

Помогите исправить ошибку: use of undeclared identifier 'n'

Помогите исправить ошибку в программе по подсчету колмонет

242