size
multimap
сообщает о количестве содержащихся в нем значений. Меня интересует количество ключей, которые он содержит. Например, учитывая multimap<int, double> foo
, я хотел бы сделать это:
const auto keyCount = ???
Один из способов получить это — использовать цикл for
для инициализированного нулем keyCount
:
for(auto it = cbegin(foo); foo != cend(foo); it = foo.upper_bound(foo->first)) ++keyCount;
Однако это не позволяет мне выполнять встроенную операцию. Поэтому я не могу инициализировать const auto keyCount
.
Решением может быть лямбда или функция, которая оборачивает этот for
-цикл, например:
template <typename Key, typename Value>
size_t getKeyCount(const multimap<Key, Value>& arg) {
size_t result = 0U;
for(auto it = cbegin(foo); foo != cend(foo); it = foo.upper_bound(foo->first)) ++result;
return result;
}
Но я надеялся на что-то предусмотренное стандартом. Существует ли такая вещь?
std::map<key,std::vector<value>>
может работать лучше. - person Slava   schedule 20.12.2017const auto keyCount = std::accumulate(...
, который оборачивает цикл for? - person 463035818_is_not_a_number   schedule 20.12.2017vector
изvector
s: stackoverflow.com/q/38244435/2642059 (хотя это все еще может быть мой лучший вариант, я все еще хотел бы получить ответ на вопрос.) - person Jonathan Mee   schedule 20.12.2017std::accumulate()
может перепрыгнуть через уникальные ключи - person Slava   schedule 20.12.2017multimap
, но, когда я думаю об этом, я почти уверен, чтоupper_bound
делает именно это. Я полагаю, по вашему мнению, мы, вероятно, могли бы сделать это, используяcount_if
илиfor_each
:( Я предполагаю, что это будет такой же хороший ответ, как я собираюсь получить, если вы наберете, я соглашусь. - person Jonathan Mee   schedule 20.12.2017upper_bound
прыгает по клавишам, не так ли? - person Jonathan Mee   schedule 20.12.2017