Я перешел на 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);
Он по-прежнему дает те же ошибки.
В С++ 11 элементы в std::set
или std::unordered_set
- все const
. Вы не можете вставлять их в один из них, вы должны удалить его и повторно добавить.
Это связано с тем, что вы определяете позицию в родительском наборе по его хеш-значению, что может измениться, если вы добавите к нему новый элемент. Он аналогичен ключам в std::map
являющимся const
.
std::unordered_set
C ++ 11?set<set<int> > Forest;
либо, потому что он пытается изменить существующий элемент, используя итератор