C++ 如果贴图擦除范围中的第一个和最后一个相等,是否删除元素?

C++ 如果贴图擦除范围中的第一个和最后一个相等,是否删除元素?,c++,dictionary,range,erase,C++,Dictionary,Range,Erase,根据: 迭代器指定要删除的映射容器中的范围: [第一个,最后一个)。即,范围包括第一个和第二个之间的所有元素 最后,包括第一个指向的元素,但不包括第一个指向的元素 由最后一位指出 这是不明确的,因为它没有处理first和last相等的情况。如果first和last相等,元素是否会被删除?这是所讨论代码的表示: map<uint16_t, boost::shared_ptr<SPacket> >::iterator it = m_MyMap.find(ack); if (i

根据:

迭代器指定要删除的映射容器中的范围: [第一个,最后一个)。即,范围包括第一个和第二个之间的所有元素 最后,包括第一个指向的元素,但不包括第一个指向的元素 由最后一位指出

这是不明确的,因为它没有处理first和last相等的情况。如果first和last相等,元素是否会被删除?这是所讨论代码的表示:

map<uint16_t, boost::shared_ptr<SPacket> >::iterator it = m_MyMap.find(ack);
if (it != m_MyMap.end()) m_MyMap.erase(m_MyMap.begin(), it);
迭代器it=m_MyMap.find(ack); 如果(it!=m_MyMap.end())m_MyMap.erase(m_MyMap.begin(),it); 如果第一个和最后一个相等,是否删除该元素

当第一个和最后一个相等时,表示空范围,并且不会擦除任何元素。这是为
std::vector::erase()

如果first==last,则迭代器first不需要是可取消引用的:删除空范围是不可操作的

std::map::erase()
的语义应该相同

map<uint16_t, boost::shared_ptr<SPacket> >::iterator it = m_MyMap.find(ack);
if (it != m_MyMap.end()) m_MyMap.erase(m_MyMap.begin(), it);
map<uint16_t, boost::shared_ptr<SPacket> >::iterator it = m_MyMap.find(ack);
if (it != m_MyMap.end()) m_MyMap.erase(m_MyMap.begin(), std::next(it));