2015-08-11 5 views
0

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

passing 'const std::map<int,char>' as 'this' argument of 
'std::pair<typename std::_Rb_tree<_Key, std::pair<const_Key,_Tp>, etc. 

функция:

void mapInit(const map<int,char> &mp) 
{ 
    for (int i = 0; i < 10; i++) 
    { 
     int x = rand() % 100; 
     char c = 'a' + rand() % 10; 
     pair<int,char> p; 
     p = make_pair(x,c); 

     mp.insert(p); 
    } 
} 

Как я должен понять это ?

+7

Почему вы думаете, что это лучше, чтобы не вставить все сообщение? Вы также сокращаете другие предложения, подобные этому? «Привет, я звоню, чтобы сообщить вам, что есть проблема с и т. Д.» – Brian

+0

Извините, мой плохой. Я пишу код на другом компьютере, когда у меня нет доступа к Интернету, и я не хочу переписывать весь массаж. – user3191398

ответ

3

Если вы пытаетесь сделать insert в map, это, безусловно, не может быть const. Вставка - мутирующая операция. Изменить подпись на

void mapInit(map<int,char>& mp) 
0

Во-первых, если вы хотите вставить элементы на карту, вы не можете использовать const. Во-вторых, вы должны использовать, например, uniform_int_distribution вместо c-style rand().

Пример:

class rand_int 
{ 
public: 
    rand_int(int l, int h) : p{l, h} {}; 
    int operator()() const {return r();} 
private: 
    uniform_int_distribution<>::param_type p; 
    function<int()> r = bind(uniform_int_distribution<>{p}, default_random_engine{}); 
}; 
Смежные вопросы