unordered_set передать по адресу

0

Я перешел на C++ с C и недавно изучил STL.

Последняя строка дает довольно длинную ошибку в стиле STL (беспомощная). Или, может быть, я новичок в шаблонах, поэтому считаю ее беспомощной.

int insert(Forest *forest, int e1) {
    Forest::const_iterator te1;
    te1 = forest->begin();
    te1->insert(e1);
}
int main() {
    //some code here
    Forest forest = (5, myHash);
    insert(&forest, e1);
}

Лес:

typedef unordered_set<unordered_set<int>, function<size_t(const unordered_set<int>)>> Forest;

РЕДАКТИРОВАТЬ: После попытки найти один из ответов

Forest::iterator te1 = forest->begin();
te1->insert(e1);

Он по-прежнему дает те же ошибки.

Теги:
stl
unordered-set

1 ответ

1
Лучший ответ

В С++ 11 элементы в std::set или std::unordered_set - все const. Вы не можете вставлять их в один из них, вы должны удалить его и повторно добавить.

Это связано с тем, что вы определяете позицию в родительском наборе по его хеш-значению, что может измениться, если вы добавите к нему новый элемент. Он аналогичен ключам в std::map являющимся const.

  • 0
    Извините, я не понимаю, вы имели в виду std::unordered_set C ++ 11?
  • 0
    Я думаю, это не только C ++ 11, вы не можете сделать это для set<set<int> > Forest; либо, потому что он пытается изменить существующий элемент, используя итератор
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню