C ++ Найти количество элементов в диапазоне от мультимапа STL ::

StackOverflow https://stackoverflow.com/questions/1699438

  •  18-09-2019
  •  | 
  •  

Вопрос

У меня есть STL :: Multimap, и я ищу его с ровным_Рангом, чтобы вернуть верхнюю и нижнюю границу. Могу ли я найти количество элементов в этом диапазоне без итерации через них всех и считая их один за другим?

#include <iostream>
#include <map>

using namespace std;

int main () {
    multimap<int,int> mm;
    pair<multimap<int, int>::iterator,multimap<int, int>::iterator> ret;
    multimap<int,int>::iterator retit;

    for (int n=0; n<100; n++) {
        mm.insert ( make_pair( rand()%10,rand()%1000) );
    }

    ret = mm.equal_range(5);

    int ct = 0;
    for (retit=ret.first; retit!=ret.second; ++retit) {
        cout << retit->second << endl;
            ct++;
    }
    cout << ct << endl;

    return 0;
}
Это было полезно?

Решение

Использовать std::distance Алгоритм, чтобы найти расстояние между итераторами. Нравиться:

int ct1 = std::distance(ret.first, ret.second);

Другие советы

Если вы просто хотите подсчитать количество элементов с помощью данного ключа, используйте count:

int ct = mm.count(5);
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top