const map & as 函数参数

const map & as function argument

本文关键字:函数 参数 as map const      更新时间:2023-10-16

我试图使函数填充地图随机值,但我得到这个错误:

 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);
   }
}

我该如何理解这个?

如果您试图将insert放入map,则肯定不能是const。插入是一个变异操作。将签名更改为

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

首先,如果要向映射中插入元素,就不能使用const。其次,你应该使用例如uniform_int_distribution而不是c风格的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{});
};