2014-01-23 2 views
2
#include <map> 

struct X { 
    int x; 

    bool operator < (const X v) const 
    { 
     return (x < v.x); 
    } 
}; 

struct Y { 
    int y; 
}; 

int main() 
{ 
    X x = {1}; 
    Y y = {2}; 

    std::map <X, Y> Z; 
    std::pair<std::map<X, Y>::iterator,bool> lastval; 

    // Insert a value 
    lastval = Z.insert(std::pair<X, Y>(x, y)); 

    // Erase the "last" inserted item 
    Z.erase(lastval.first->first); 

    // Error: Check if last item was erased or if iterator is valid 
    if (lastval.first != Z.end()) 
    { 
     /* ... */ 
    } 
} 

При получении проверки, был ли удален последний вставленный элемент, я получаю сообщение об ошибке. Есть ли способ проверить это?Проверьте, не вставлен ли последний введенный элемент с помощью клавиши карты

ответ

2

Используйте возвращаемое значение из map::erase

if(Z.erase(lastval.first->first)) 
{ 
    /* item has been erased */ 
} 

или

// Erase the "last" inserted item 
Z.erase(lastval.first->first); 

if(Z.find(x) == Z.end()) 
{ 
    /* item has been erased */ 
} 

Вы должны также изменить ваш operator< к

bool operator < (const X& v) const 
//     ^
//   take arg by reference to avoid unnecessary copying 
Смежные вопросы