设置插入迭代器超出范围
set insert iterator is outside range
我的程序崩溃了,当我 运行 下面的代码时:
std::set<int> m_set = {1, 2, 3, 4, 5 };
std::set<int>::iterator setIt = m_set.begin();
++setIt;
m_set.erase(setIt);
m_set.insert(setIt, 25);
我有一个 std::set,其中填充了对象 Point
。代码编译成功,但在此处崩溃 m_set.insert(setIt, 25)
。我应该怎么做才能解决它?谢谢!
从你的评论来看,我认为你对std::set
有点误解。我认为您正在尝试像在 std::vector
或 std::array
.
中那样替换元素
但是一个集合是一个排序的集合,你不能只取出一个元素并将另一个元素放在完全相同的位置,因为它很可能不会之后排序。
当您插入任何内容时,需要找到新元素的正确位置。
set.insert
的第一个参数在这里可以提供帮助。这是一个提示,从哪里开始搜索这个正确的地方。
但这只是一个提示,它不会以任何方式影响元素的最终位置。给出一个“好”的提示可以加快插入速度,给出一个“坏”的提示可以减慢插入速度,但是无论如何元素最终都会在相同的位置。
另一个问题是,erase
会使迭代器失效,即以后不允许使用此迭代器。
只需使用
m_set.insert(25);
元素将被放置在正确的位置。
我的程序崩溃了,当我 运行 下面的代码时:
std::set<int> m_set = {1, 2, 3, 4, 5 };
std::set<int>::iterator setIt = m_set.begin();
++setIt;
m_set.erase(setIt);
m_set.insert(setIt, 25);
我有一个 std::set,其中填充了对象 Point
。代码编译成功,但在此处崩溃 m_set.insert(setIt, 25)
。我应该怎么做才能解决它?谢谢!
从你的评论来看,我认为你对std::set
有点误解。我认为您正在尝试像在 std::vector
或 std::array
.
但是一个集合是一个排序的集合,你不能只取出一个元素并将另一个元素放在完全相同的位置,因为它很可能不会之后排序。
当您插入任何内容时,需要找到新元素的正确位置。
set.insert
的第一个参数在这里可以提供帮助。这是一个提示,从哪里开始搜索这个正确的地方。
但这只是一个提示,它不会以任何方式影响元素的最终位置。给出一个“好”的提示可以加快插入速度,给出一个“坏”的提示可以减慢插入速度,但是无论如何元素最终都会在相同的位置。
另一个问题是,erase
会使迭代器失效,即以后不允许使用此迭代器。
只需使用
m_set.insert(25);
元素将被放置在正确的位置。