У меня есть проблема с удалением элемента из set
в пределах map
под названием accesrightsByRank
. Ключ от карты отличается ACCESRIGHT
s: owner
, modify
, read
и none
. Значения map
: set
с именами аксессуаров с определенными ACCESRIGHT
с.Как удалить элемент из набора внутри карты?
map<ACCESSRIGHT, set<string>>::const_iterator i;
set<string>::const_iterator j;
for(i = this->accessrightsByRank.begin(); i != this->accessrightsByRank.end(); i++){
for(j = (*i).second.begin(); j != (*i).second.end(); j++){
if((*j).compare(p_Username) == 0){
i->second.erase(j);
}
}
}
i->second
Я думал, дал бы мне set
, из которого я мог бы стереть имя пользователя, который больше не имеет определенного ACCESRIGHT
, но мне кажется, я сделал что-то неправильно. Может кто-нибудь объяснить мне, почему это не работает, и как мне настроить свой код?
Это ошибка я получаю:
IntelliSense: нет экземпляра перегруженной функции «
std::set<_Kty, _Pr, _Alloc>::erase
[с_Kty=std::string
,_Pr=std::less<std::string>
,_Alloc=std::allocator<std::string>
]» совпадает со списком аргументов и объект (объект имеет тип классификаторов, которые не позволяют обеспечить совпадение) типов аргументов являются: (std::_Tree_const_iterator<std::_Tree_val<std::_Tree_simple_types<std::string>>>
) типа объекта:const std::set<std::string, std::less<std::string>, std::allocator<std::string>>
'' const_iterator' дает сопз набор & ', как' second' –
@PiotrSkotnicki почему не отвечаешь? –
Вы побеждаете всю цель 'map' и' set', если вам нужно сделать линейный поиск, просто говоря ... Вы должны использовать 'set :: find', а не линейный поиск. – PaulMcKenzie