Операции C++ над значениями, заданными multiset::equal_range

Я пытаюсь написать программу, которая берет 1000 случайных чисел от 0 до 9, а затем подсчитывает, сколько раз появилось каждое число:

    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), она подчеркивает минус и говорит, что ни один оператор не соответствует этим операндам. Но почему? Разве не ноль. Первый и ноль. Второй концы отсеков? И как это исправить?

Изменить: я должен использовать мультимножество, вектор и equal_range, это то, что выбрал мой учитель, а не я.

2 ответа

Решение

Использование distance(zero.first, zero.second), - Оператор не может быть применен к мультимножественным итераторам.

Это было бы намного проще, используя карту:

std::map<int, int> counts;
...
count[num]++; // map::operator[] will insert the value if it's not already in the sequence.
Другие вопросы по тегам