std :: for_each () для карты дает неверную ошибку инициализации

Используйте следующий код

DELIMITER $$

    CREATE TRIGGER bu_table1_each BEFORE UPDATE ON table1 FOR EACH ROW
    BEGIN
      SET new.datefield = NOW();
    END $$

    DELIMITER ;
2
задан El Profesor 16 January 2019 в 08:56
поделиться

3 ответа

Распределитель по умолчанию, используемый для std::multimap, является

std::allocator<std::pair<const Key, T>

. Таким образом, ключи в std::multimap являются const, что делает тип как

std::pair<const std::string, std::string>

, где как [117 ] ожидает параметр как ссылку на тип

std::pair<std::string, std::string>

Изменить ask() на

void ask(std::pair<const std::string, std::string>& entry)
{
}
0
ответ дан Gaurav Sehgal 16 January 2019 в 08:56
поделиться

Тип элемента std::multimap<std::string, std::string> - std::pair<const std::string, std::string>. Обратите внимание на const

0
ответ дан Igor Tandetnik 16 January 2019 в 08:56
поделиться

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

void ask(std::multimap<std::string, std::string>::reference entry) {
    // do something...
}

Возможно, было бы неплохо создать псевдоним типа для этого типа карты, чтобы вам не приходилось повторять его

using myMap_t = std::multimap<std::string, std::string>;

void ask(myMap_t::reference entry) {
    // do something...
}

int main() {
    myMap_t myMap;
    for (int i = 0; i < 5; i++) {
        myMap.insert(myMap_t::value_type("key", "value"));
    }

    std::for_each(myMap.begin(), myMap.end(), ask);
}
0
ответ дан Caleth 16 January 2019 в 08:56
поделиться
Другие вопросы по тегам:

Похожие вопросы: