Я продолжаю продолжать об этом, но нет никакого способа, которым я могу рекомендовать regexr слишком часто. Это фантастически для тестирования этого типа вещей.
Для этого можно использовать std :: advance (iter, numberofsteps)
.
Универсальное решение практически для любого контейнера, например 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());
}
std :: map не является списком. Нет "первых n" элементов.
Кстати: итераторы становятся недействительными при изменении контейнера.
Если вам действительно нужна карта меньшего размера, вы можете выполнить итерацию по ней и добавить все элементы до n-го в новая карта.
Правильный способ - использовать 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());
Почему вы хотите изменять размер карты?
Элементы на карте не совпадают.
Интересно, что std :: map имеет порядок, но не уверен, насколько полезна эта концепция.
Находятся ли записи в том же порядке сортировки, что и ключи?
Что это значит? Если у вас есть имена с ключом SSN, означает ли это, что имена хранятся в числовом порядке SSN?