尝试编写一个方法,从std::map中删除前N个(键最小的)项。尝试了以下代码:
void EraseNMapElements(const int numElementsToRemove){
const int originalSize = _map.size();
auto eraseIter = _map.begin();
std::advance(eraseIter, numElementsToRemove);
_map.erase(_map.begin(), eraseIter);
assert(_map.size() == (originalSize - numElementsToRemove)) || (0 == originalSize) || (0 == _map.size()));
}
当元素数量大于要删除的数量时,它可以正常工作。所以如果我有5个元素,并要求删除2个,则最后3个元素将保留。但是,如果我只有一个元素并请求删除2个,则仍然会保留一个元素。
有没有一种简洁的方法来解决这个问题?我可以在周围添加一个IF语句,检查numElementsToRemove是否大于map.size(),但肯定有更好的解决方案吧?