Как получить первые n элементы станд.:: карта

Я продолжаю продолжать об этом, но нет никакого способа, которым я могу рекомендовать regexr слишком часто. Это фантастически для тестирования этого типа вещей.

6
задан dandan78 3 November 2014 в 12:40
поделиться

5 ответов

Для этого можно использовать std :: advance (iter, numberofsteps) .

13
ответ дан 8 December 2019 в 13:46
поделиться

Универсальное решение практически для любого контейнера, например std :: list, std :: map, boost :: multi_index. Вы должны проверять только размер своей карты.

template<class It>
It myadvance(It it, size_t n) {
   std::advance(it, n);
   return it;
}

template<class Cont>
void resize_container(Cont & cont, size_t n) {
    cont.erase(myadvance(cont.begin(), std::min(n, cont.size())), 
                 cont.end());
}
3
ответ дан 8 December 2019 в 13:46
поделиться

std :: map не является списком. Нет "первых n" элементов.

Кстати: итераторы становятся недействительными при изменении контейнера.

Если вам действительно нужна карта меньшего размера, вы можете выполнить итерацию по ней и добавить все элементы до n-го в новая карта.

0
ответ дан 8 December 2019 в 13:46
поделиться

Правильный способ - использовать std :: advance. Но вот забавный (медленный) способ, позволяющий «использовать изменение размера на карте». В более общем плане, этот вид уловки можно использовать для других вещей, работающих с вектором, но не с картой.

map<K,V> m; //your map
vector< pair<K,V> > v(m.begin(), m.end());
v.resize(n);
m = map<K,V>(v.begin(),v.end());
1
ответ дан 8 December 2019 в 13:46
поделиться

Почему вы хотите изменять размер карты?

Элементы на карте не совпадают. Интересно, что std :: map имеет порядок, но не уверен, насколько полезна эта концепция.
Находятся ли записи в том же порядке сортировки, что и ключи?
Что это значит? Если у вас есть имена с ключом SSN, означает ли это, что имена хранятся в числовом порядке SSN?

0
ответ дан 8 December 2019 в 13:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: