C++ 对 multiset::equal_range 给出的值的操作

C++ operations on values given by multiset::equal_range

我正在尝试编写一个程序,从 0 到 9 中取 1000 个随机数,然后计算每个数字出现的次数:

    srand(time(NULL));
    multiset<int> M;//multiset that contains 1000 random numbers from 0 to 9
    for (int i = 0; i < 1000; i++){
        r.insert(rand() % 10);
        s.insert(rand() % 10);
    }

    vector <int> R(10);//vector that stores how many times each number appeared 
    //(so R[0] equals how many times 0 appeared and so on)

    pair<multiset<int>::iterator, multiset<int>::iterator> zero = M.equal_range(0);
    R[0] = zero.second - zero.first;

问题出在最后一行(我正在计算 0 出现的次数),它在减号下划线并表示没有运算符匹配这些操作数。但为什么? zero.first 和 zero.second 不是隔间的末端吗?以及如何修复它?

编辑:我必须使用多重集、向量和equal_range,这些是我老师选的,不是我选的。

使用地图会容易得多:

std::map<int, int> counts;
...
count[num]++; // map::operator[] will insert the value if it's not already in the sequence.

使用distance(zero.first, zero.second)- 运算符不能应用于多重集迭代器。